2 import java
.io
.IOException
;
3 import java
.util
.Iterator
;
5 import java
.util
.Hashtable
;
6 import java
.util
.Enumeration
;
10 * Beskrivning av klassen.
12 public class MySearcher
extends MapSearcher
{
16 * Skapar en ny MySearcher-instans.
18 public MySearcher () {
23 * Specificerar kartan.
25 * @param map Den XML-fil som representerar kartan.
27 * @TODO fixa this.map.insertEdge() för alla noder.
29 public void setMap(File mapFile
) {
31 List
<Element
> cityElements
;
33 doc
= loadXmlMap(mapFile
);
34 //System.out.println(doc.getRootElement().toString());
35 cityElements
= doc
.getRootElement().getChildren();
36 map
= new Graph(cityElements
.size(), 5);
37 // Iterate through cityElements
38 for (Element cityElement
: cityElements
) {
39 // Prints names of cities
40 String cityName
= cityElement
.getAttributeValue("id");
41 int cityX
= Integer
.parseInt(cityElement
.getAttributeValue("x"));
42 int cityY
= Integer
.parseInt(cityElement
.getAttributeValue("y"));
43 GraphNode cityNode
= map
.insertNode(cityName
, cityX
, cityY
);
44 //System.out.println(cityName + " at position (" + cityX + ", " + cityY + ")");
46 List
<Element
> roadElements
= cityElement
.getChildren();
47 // Iterate through roadElements
48 for (Element roadElement
: roadElements
) {
49 String roadTo
= roadElement
.getAttributeValue("to");
50 Double roadSpeed
= Double
.parseDouble(roadElement
.getAttributeValue("speed"));
51 // Prints all roads connected to the current cityElement
52 //System.out.println(" road to -> " + roadElement.getAttributeValue("to"));
54 if (map
.isInGraph(roadTo
)) { // @FIX declare var in if condition
55 GraphNode roadToNode
= map
.getNode(roadTo
);
56 Double distance
= Math
.hypot((cityNode
.getX() - roadToNode
.getX()),
57 (cityNode
.getY() - roadToNode
.getY()));
58 time
= distance
/ (roadSpeed
/ 3.6);
60 map
.insertEdge(cityName
, roadTo
, time
);
61 // @FIX change roadSpeed to time
65 catch (IOException e
) {
66 System
.err
.println ("Could not read/find file.");
68 } catch (JDOMException e
) {
69 System
.err
.println ("File is not in valid XML format?");
71 } catch (NumberFormatException e
) {
72 System
.err
.println ("Coordinates cannot be parsed.");
77 * Utför sökning med Greedy Search.
79 * @param from Den plats sökningen börjar från.
80 * @param to Den plats sökningen avslutas på.
82 public String
greedySearch (String from
, String to
) {
84 * implementation av greedySearch.
90 * Utför sökning med A*.
92 * @param from Den plats sökningen börjar från.
93 * @param to Den plats sökningen avslutas på.
94 * @param fastest Om <code>true</code>, hitta snabbaste vägen,
95 * annars den kortaste.
97 public String
aStar (String from
, String to
, boolean fastest
) {
98 // skapa en tabell över hur långt det är från alla platser på
99 // kartan till målet för sökningen
100 Hashtable
<String
, Double
> targetDistTable
=
101 new Hashtable
<String
, Double
>(map
.size());
102 // spara ned målnoden
103 GraphNode targetLocation
= map
.getNode(to
);
107 for (e
= map
.getNodes(),
108 tempNode
= (GraphNode
) e
.nextElement();
109 e
.hasMoreElements(); // medan e har element
110 tempNode
= (GraphNode
) e
.nextElement()) {
111 // spara avståndet till målnoden för varje nod
112 targetDistTable
.put(tempNode
.getName(),
113 Math
.hypot(targetLocation
.getX()-tempNode
.getX(),
114 targetLocation
.getY()-tempNode
.getY()));
117 * implementation av aStar.
123 * Utför bredden-förstsökning.
125 * @param from Den plats sökningen börjar från.
126 * @param to Den plats sökningen avslutas på.
128 public String
breadthFirst (String from
, String to
) {
130 * implementation av breadthFirst.
136 * Utför djupet-förstsökning.
138 * @param from Den plats sökningen börjar från.
139 * @param to Den plats sökningen avslutas på.
141 public String
depthFirst (String from
, String to
) {
143 * implementation av depthFirst.
148 public String
toString() {
149 return map
.toString();