Implementierung in Java

Werbung
Knoten: Wanderer zwischen den Welten
Implementierung in Java
Knoten eines Graphs
Warteschlangenelement
Datenstruktur für den Dijkstra-Algorithmus
2
Knoten eines Graphs
Kante eines Graphs
Attribute
Attribute
Name
Zielknoten der Kante
Kanten (als Liste)
Entfernung zum Zielknoten über diese Kante
3
4
Knoten
Kante
+ knoten: Knoten
+ name: String
+ kanten: Kante[]
+ entfernung: int
(c) Knoten(n: String, e: int)
(c) Kante(k: Knoten, entf: int)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
p u b l i c c l a s s Kante {
p u b l i c Knoten z i e l k n o t e n ;
public int entfernung ;
}
p u b l i c Kante ( Knoten knoten , i n t e n t f e r n u n g ) {
t h i s . z i e l k n o t e n = knoten ;
this . entfernung = entfernung ;
}
Warteschlangenelement
p u b l i c c l a s s Knoten {
p u b l i c S t r i n g name ;
p u b l i c Kante [ ] k a n t e n = new Kante [ 1 0 ] ;
Attribute
private int kantenanzahl = 0;
p u b l i c Knoten ( S t r i n g name ) {
t h i s . name = name ;
}
}
p u b l i c v o i d f u e g e K a n t e H i n z u ( Kante k t ) {
t h i s . kanten [ kantenanzahl ] = kt ;
this . kantenanzahl = this . kantenanzahl + 1;
}
entfernung (als Gewicht)
Verweis auf den Nachfolger in der Warteschlange
Methoden
Einfügen eines Knotens
Entfernen eines Knotens
Ausgabe des Restes Warteschlange
8
Knoten
Kante
Knoten
Kante
+ name: String
+ name: String
+ knoten: Knoten
+ kanten: Kante[]
+ knoten: Knoten
+ kanten: Kante[]
+ entfernung: int
+ entfernung: int
+ entfernung: int
+ entfernung: int
(c) Kante(k: Knoten, entf: int)
+ nachfolger: Knoten
(c) Kante(k: Knoten, entf: int)
(c) Knoten(n: String, e: int)
(c) Knoten(n: String, e: int)
+ fuegeKnotenEin(k: Knoten)
Warteschlange
- kopf: Knoten
+ nachfolger: Knoten
+ fuegeKnotenEin(k: Knoten)
Warteschlange
+ entferneKnoten(k: Knoten)
- kopf: Knoten
+ gibRestWarteschlangeAus()
(c) Warteschlange()
(c) Warteschlange()
+ fuegeKnotenEin(k: Knoten)
+ fuegeKnotenEin(k: Knoten)
+ entferneKnoten(k: Knoten)
+ entferneKnoten(k: Knoten)
+ gibErstesElementZurueck(): Knoten
+ gibErstesElementZurueck(): Knoten
+ gibWarteschlangeAus()
+ gibWarteschlangeAus()
+ entferneKnoten(k: Knoten)
+ gibRestWarteschlangeAus()
Datenstruktur für den Dijkstra-Algorithmus
Übung
Attribute
Verweis auf den Vorgänger im Pfad
Methoden
1. Implementieren Sie die fehlenden Methoden
der Muster-Implementierung
2. Testen Sie das Verhalten der Warteschlange mit
Beispieldaten
Expandieren eines Knotens
benötigt die aktuelle Warteschlange als Parameter
Ausgabe des resultierenden Pfades (kürzester Weg)
12
Knoten
Kante
Knoten
Kante
+ name: String
+ name: String
+ knoten: Knoten
+ kanten: Kante[]
+ knoten: Knoten
+ kanten: Kante[]
+ entfernung: int
+ entfernung: int
+ entfernung: int
+ entfernung: int
(c) Kante(k: Knoten, entf: int)
+ nachfolger: Knoten
(c) Kante(k: Knoten, entf: int)
+ vorgaengerImPfad: Knoten
+ vorgaengerImPfad: Knoten
+ istMarkiert: boolean
Warteschlange
- kopf: Knoten
(c) Warteschlange()
+ fuegeKnotenEin(k: Knoten)
+ entferneKnoten(k: Knoten)
+ gibErstesElementZurueck(): Knoten
+ nachfolger: Knoten
+ istMarkiert: boolean
(c) Knoten(n: String, e: int)
Warteschlange
+ fuegeKnotenEin(k: Knoten)
- kopf: Knoten
+ entferneKnoten(k: Knoten)
(c) Warteschlange()
+ gibRestWarteschlangeAus()
+ fuegeKnotenEin(k: Knoten)
+ expandiereKnoten(ws: Warteschlange)
+ entferneKnoten(k: Knoten)
+ gibPfadAus()
+ gibErstesElementZurueck(): Knoten
(c) Knoten(n: String, e: int)
+ fuegeKnotenEin(k: Knoten)
+ entferneKnoten(k: Knoten)
+ gibRestWarteschlangeAus()
+ expandiereKnoten(ws: Warteschlange)
+ gibPfadAus()
+ gibWarteschlangeAus()
+ gibWarteschlangeAus()
Die Hauptklasse der Anwendung
Übung
Muss zu Beginn den Graph erzeugen
kennt Start- und Zielknoten der Suche
1. Implementieren Sie die fehlenden Methoden
der Muster-Implementierung
berechnet den kürzesten Weg
16
Knoten
Kante
+ name: String
+ knoten: Knoten
+ kanten: Kante[]
+ entfernung: int
+ entfernung: int
+ nachfolger: Knoten
(c) Kante(k: Knoten, entf: int)
+ vorgaengerImPfad: Knoten
+ istMarkiert: boolean
(c) Knoten(n: String, e: int)
Warteschlange
Algorithmus
+ fuegeKnotenEin(k: Knoten)
- kopf: Knoten
+ startknoten: Knoten
+ entferneKnoten(k: Knoten)
(c) Warteschlange()
+ zielknoten: Knoten
+ gibRestWarteschlangeAus()
+ fuegeKnotenEin(k: Knoten)
+ graph: Kanten[]
+ expandiereKnoten(ws: Warteschlange)
+ entferneKnoten(k: Knoten)
(c) Algorithmus()
+ gibErstesElementZurueck(): Knoten
+ berechneWeg()
+ gibWarteschlangeAus()
+ gibPfadAus()
+ main()
Algorithmus
+ startknoten: Knoten
+ zielknoten: Knoten
+ graph: Kanten[]
(c) Algorithmus()
+ berechneWeg()
+ main()
Übung
1. Implementieren Sie die Methode
berechneWeg(Warteschlange ws) der
Klasse Algorithmus
2. Testen Sie die fertige Anwemdung anhand von
minimalen Eingabedaten
Herunterladen