PriorityQueue im dijkstra Algorithmus implementieren

BlackBox1337

Mitglied
Ich hab ein Problem mit der Implementation der PriorityQueue im Dijkstra Algorithmus. Da ich kaum mit Java gearbeitet habe funktioniert die Idee ganz gut aber sicher sind ein paar Syntax Fehler drin weswegen ich Fehler bekomme.

Java:
import java.util.*;

public class Dijkstra extends WeightedGraph 
{

	final double INFINITE = Double.MAX_VALUE;
	
	public Dijkstra() 
	{
		super(true);
	}

	public HashMap<String, Double> dijkstra(String start)
    {
        HashMap<String, Double> distance = new HashMap<String, Double>();
        
        
        PriorityQueue<String> Q = new PriorityQueue<String>(double, String);  //Erstellt die Queue Q
        
        
		//Distanzen aller Knoten auf Unendlich setzen
		for(GraphNode nodes : getNodes()){
			distance.put(nodes.getLabel(),INFINITE);
			Q.insert(INFINITE, nodes.getLabel());   //alle Knoten mit Unendlich in Q einfügen
		}
		distance.put(start, 0.0);   //Startwert bekommt Entfernung 0
		Q.remove(INFINITE, start);  //Den Start Knoten wieder entfernen
		Q.Add(0.0, start); 			//und mit der Entfernung von 0.0 einfügen
		

        while (!Q.isEmpty())        // Solange etwas in der Queue ist

        {
        	String min = Q.extractObj();   // wird der kleinste Knoten entfernt
            for (GraphNode n : getNodes()) // Für jeden Knoten
            {
            	if (min == n)				  // Wenn dieser Knoten = Q dann
            		
                for (Edge e : n.getEdges())// Für jede Kante
                {                 
                    if (distance.get(n.getLabel()) + e.getWeight() < distance.get(e.getDestNode().getLabel())) {      
                    	//distance + Gewicht < Zielknoten                  
                         
                        Q.remove(distance.get(e.getDestNode().getLabel()),e.getDestNode().getLabel()); //Wird der zielknoten aus Q entfernt
                        Q.add(distance.get(n.getLabel()) + e.getWeight(), e.getDestNode().getLabel()); //und mit den neuen Werten wieder eingefügt
                        
                        distance.put(e.getDestNode().getLabel(), distance.get(n.getLabel()) + e.getWeight());
                        //distance in Zielknoten schreiben
                    }
                }
            }
        }
        return distance; //Ergebnis zurückliefern
    }

    
    public static void main(String[] args)
    {
    	Dijkstra Dij = new Dijkstra();
    	Dij.addNode("0");
    	Dij.addNode("1");
    	Dij.addNode("2");
    	Dij.addNode("3");
    	Dij.addNode("4");
    	Dij.addEdge("0", "1", 6);
    	Dij.addEdge("0", "3", 7);
    	Dij.addEdge("1", "3", 8);
    	Dij.addEdge("1", "4", -4);
    	Dij.addEdge("1", "2", 5);
    	Dij.addEdge("2", "1", -2);
    	Dij.addEdge("3", "2", -3);
    	Dij.addEdge("3", "4", 9);
    	Dij.addEdge("4", "2", 7);
    	Dij.addEdge("0", "1", 6);
    	Dij.addEdge("4", "0", 2);
        System.out.println(Dij.dijkstra("0"));
    }
}

Fehlerausgabe: "Syntax error on token "double", invalid ArgumentList" z:18

Der Double Wert in der PriorityQueue ist der Wert den der jeweilige Knoten gerade besitzt und soll der Wert sein an dem die Queue die Knoten sortiert und mir den kleinsten ausgibt, der String ist der Knoten und soll zum Vergleich in der For Schleife dienen.

Der Algorithmus läuft so richtig nur mit der implementation der Queue hab ich Probleme. Ich hoffe das einer meinen Fehler findet.
 
S

SlaterB

Gast
Dijkstra und 77 deiner geposteten 78 Zeilen sind quasi egal, die Fehlermeldung sagt dir doch exakt was falsch ist,
hier dasselbe in einem kürzeren Programm:
Java:
public class Test
{
    public static void main(String[] args)
    {
        PriorityQueue<String> Q = new PriorityQueue<String>(double, String);
    }
}
diese Code-Zeile von dir ergibt schlicht keinen Sinn, nicht mehr und nicht weniger ist das Problem

verwende nur Code-Zeilen, die auch Sinn ergeben,
welchen Zweck verfolgst du damit, "double" nach der Klammer zu schreiben, was wäre wenn es nicht da steht?,
du musst dir doch etwas dabei gedacht haben, was ist das


edit:
> Der Double Wert in der PriorityQueue [..] soll der Wert sein

so funktioniert es nicht, Wünsche kann man nicht direkt reinbauen, PriorityQueue<String> ist allein eine Liste von Strings
 
Zuletzt bearbeitet von einem Moderator:

BlackBox1337

Mitglied
Ich möchte ja Objekte in die Queue stecken die aus einem double und einen String wert bestehen, und der double Wert soll halt der Wert sein womit die Queue die Werte sortiert und mir den kleinsten wiedergibt.
Und ich habe mir halt gedacht das wenn ich eine Queue erstelle das ich in klammern schreibe welche Werte die Objekte annehmen die ich der Queue hinzufügen will. Und das ist ja (double,String).
Wenn ich das weglasse gibt er mir bei jedem add oder remove Fehler an dass er die Objekte nicht hinzufügen kann.
 
S

SlaterB

Gast
die Fehler gibt es, weil die restlichen Aufrufe auch nicht so toll sind, in der ganzen API wirst du z.B. keine großgeschriebene Methode finden (Q.Add(0.0, start); ),
Variablen wie Q besser auch klein schreiben

so, um deinen Wunsch umzusetzen schlage ich vor, eine Klasse DistanceLabel anzulegen, mit Attributen double + String,
diese Klasse muss Comparable sein, in der compareTo-Methode wird nach double verglichen,

die Queue lautet dann
Java:
PriorityQueue<DistanceLabel> q = new PriorityQueue<DistanceLabel>()

nicht ganz leicht mit Comparable, aber eine gute Gelegenheit, damit anzufangen,
folgendes Buch-Kapitel hilft
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 12 Datenstrukturen und Algorithmen
 

Andi_CH

Top Contributor
EDIT: Ja, ich hätte update machen sollen, bevor ich mit tippen begonnen habe ;-) mea culpa


Erstens Variablennamen bitte klein schreiben
Zweiten Variablennamen bitte aussagekräftig wählen - mehr als einen Buchstaben

-> z.B. PriorityQueue<String> prioQueue = new .........

Drittens Was für Konstruktoren bietet PriorityQueue denn so an?

Java:
    public PriorityQueue() {}
    public PriorityQueue(int initialCapacity) {}
    public PriorityQueue(int initialCapacity,
                         Comparator<? super E> comparator) {}
    public PriorityQueue(Collection<? extends E> c) {}
    public PriorityQueue(PriorityQueue<? extends E> c) {}
    public PriorityQueue(SortedSet<? extends E> c) {}

Das sind alle - es gibt keinen mit (double, String) bzw (double, E) als Profil...
also such dir den passenden aus.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Probleme im Umgang mit PriorityQueue Java Basics - Anfänger-Themen 75
M Getter einer PriorityQueue Java Basics - Anfänger-Themen 1
Shizmo PriorityQueue mit Objekten Java Basics - Anfänger-Themen 10
U PriorityQueue remove Java Basics - Anfänger-Themen 2
U PriorityQueue initial capacity Java Basics - Anfänger-Themen 3
SheldoN Sortieren in PriorityQueue Java Basics - Anfänger-Themen 6
P PriorityQueue mit Einfügereihenfolge Java Basics - Anfänger-Themen 6
G Datentypen PriorityQueue und Map Java Basics - Anfänger-Themen 4
S PriorityQueue? Java Basics - Anfänger-Themen 2
H Membervariablen für PriorityQueue vergleichen? Java Basics - Anfänger-Themen 7
R PriorityQueue Java Basics - Anfänger-Themen 3
D Dijkstra Algorithmus Hilfe!! Java Basics - Anfänger-Themen 9
U Meinung zum Dijkstra Algorithmus Java Basics - Anfänger-Themen 6
U Dijkstra Algorithmus Laufzeit Java Basics - Anfänger-Themen 3
S Dijkstra-Algoritmus Java Basics - Anfänger-Themen 7
M Dijkstra Algorithmus in Graphen auf mehrere verschiedene Knoten anwenden lassen Java Basics - Anfänger-Themen 11
S Dijkstra Algorithmus funktioniert nicht Java Basics - Anfänger-Themen 4
S GraphNode --- Dijkstra Algorithmus : NullPointerException Java Basics - Anfänger-Themen 1
Binary.Coder Tipp für Ein-/Ausgabe für Dijkstra Java Basics - Anfänger-Themen 6
K Dijkstra implementierung 2.0 Java Basics - Anfänger-Themen 19
T Dijkstra auf adjazenzmatrix Java Basics - Anfänger-Themen 7
K Algorithmus entwickeln Java Basics - Anfänger-Themen 1
laxla123 Eigenschaften eines Algorithmus (determiniert vs.. deterministisch) Java Basics - Anfänger-Themen 2
C Gewinnspiel erstellen mit Algorithmus Java Basics - Anfänger-Themen 3
C negamax-Algorithmus für Tic-Tac-Toe spielt manchmal falsch Java Basics - Anfänger-Themen 10
H Minimax Algorithmus in Tic Tac Toe Java Basics - Anfänger-Themen 3
M Minimax-Algorithmus für Vier gewinnt Java Basics - Anfänger-Themen 11
ohneInformatik; Trockentest Algorithmus, mathematischen Zusammenhang angeben Java Basics - Anfänger-Themen 3
M Minimax-Algorithmus Java Basics - Anfänger-Themen 17
mervanpolat Binary Search Algorithmus ausführen Java Basics - Anfänger-Themen 1
J Rekursiver Algorithmus Java Basics - Anfänger-Themen 9
M monte carlo Algorithmus für 4 gewinnt Java Basics - Anfänger-Themen 12
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
S Algorithmus entwicklen, der zu einem gegebenen Datum die Jahreszeit ermittelt Java Basics - Anfänger-Themen 13
rosima26 Merge-Algorithmus Java Basics - Anfänger-Themen 53
C Ein Algorithmus soll schneller werden Java Basics - Anfänger-Themen 24
U Den Kuchen aufteilen - aber wie? (Rebalancing-Algorithmus) Java Basics - Anfänger-Themen 14
s_1895 Pseudocode Naiver Algorithmus Java Basics - Anfänger-Themen 17
H String verschlüsseln - eigener Algorithmus Java Basics - Anfänger-Themen 104
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
Düsseldorf2002 Testen meines Algorithmus Java Basics - Anfänger-Themen 1
D Primzahlen Rechner nach Eratostenes von Kyrene Algorithmus Java Basics - Anfänger-Themen 2
KogoroMori21 Frage zum Euklidischen Algorithmus Java Basics - Anfänger-Themen 11
S Algorithmus java searchAll IKey Java Basics - Anfänger-Themen 4
S Algorithmus Datensätze einfügen wenn... Java Basics - Anfänger-Themen 26
KogoroMori21 MergeSort Algorithmus Java Basics - Anfänger-Themen 2
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
fendix Compiler-Fehler Algorithmus zur Bestimmung von Primzahlen Java Basics - Anfänger-Themen 7
S Algorithmus (reelle Zahl <65536 von dezimal zu dual) max. 10 Nachkommastellen Java Basics - Anfänger-Themen 4
G Algorithmus Graphen Java Basics - Anfänger-Themen 10
D Input/Output fehlerhafter Algorithmus zum Ersetzen von Array-Werten nach logischem Schema Java Basics - Anfänger-Themen 1
N Selection Algorithmus: Methode wird nicht erkannt (BlueJ) Java Basics - Anfänger-Themen 3
L Math.exp also eigenen Algorithmus Java Basics - Anfänger-Themen 2
Kirby.exe Algorithmus entwickeln Java Basics - Anfänger-Themen 37
M Algorithmus Max-Heap? Java Basics - Anfänger-Themen 3
I Labyrinth auf der Basis eines rekursiven Algorithmus Java Basics - Anfänger-Themen 27
CptK Best Practice Algorithmus nach jedem Schritt zum Visualisieren pausieren Java Basics - Anfänger-Themen 3
A Algorithmus effizienter machen Java Basics - Anfänger-Themen 1
V Algorithmus zur fortlaufenden Berechnung des duechscjnt Java Basics - Anfänger-Themen 1
O Labyrinth Algorithmus Java Basics - Anfänger-Themen 3
G Quicksort Algorithmus Java Basics - Anfänger-Themen 12
S Binäre-Suche Algorithmus Java Basics - Anfänger-Themen 1
D Algorithmus in Pseudocode mit log2(n) Operationen erstellen Java Basics - Anfänger-Themen 3
C Laufzeit eines Sortier-Algorithmus ermitteln Java Basics - Anfänger-Themen 4
H aufgabe java luhn algorithmus Java Basics - Anfänger-Themen 10
A Datenstruktur für Savings Algorithmus und Planung von kleinen Programmierprojekten Java Basics - Anfänger-Themen 1
J Algorithmus für eine Reihe implementieren Java Basics - Anfänger-Themen 2
N Denksportaufgabe durch Algorithmus lösen Java Basics - Anfänger-Themen 2
S Problem mit einem rekursivem FloodFill Algorithmus Java Basics - Anfänger-Themen 62
B Algorithmus Square und Multiply Java Basics - Anfänger-Themen 3
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
D Frage Boyer-Moore Algorithmus Java Basics - Anfänger-Themen 7
M Komplexität Algorithmus Java Basics - Anfänger-Themen 8
H Zeichen im algorithmus Java Basics - Anfänger-Themen 4
B Code Verständnisfragen - FLoyd Warshall Algorithmus Java Basics - Anfänger-Themen 1
B Algorithmus zum entmischen einer Zahlenfolge Java Basics - Anfänger-Themen 15
X Minimax-Algorithmus über alle Kanten möglich? - Kanten darstellen Java Basics - Anfänger-Themen 1
T Algorithmus zur Überprüfung eines binären Suchbaums Java Basics - Anfänger-Themen 2
K Best Practice Algorithmus für Berechnung von Zahlenreihenfolge Java Basics - Anfänger-Themen 12
M Simpler Algorithmus läuft extrem langsam. Java Basics - Anfänger-Themen 3
K Erste Schritte Brute Force Algorithmus Java Basics - Anfänger-Themen 2
L Frage zu BubbleSort Algorithmus Java Basics - Anfänger-Themen 2
B gibt es ein Stundenplan-Algorithmus? Java Basics - Anfänger-Themen 11
O Algorithmus-Problem Java Basics - Anfänger-Themen 5
P Euklidischer Algorithmus Java Basics - Anfänger-Themen 9
L Greates Commong Dividend - euklidischer Algorithmus, modulos not positive Java Basics - Anfänger-Themen 5
J Euklidischer Algorithmus Java Basics - Anfänger-Themen 1
S Quicksort Algorithmus Java Basics - Anfänger-Themen 2
B Rekursive Algorithmus schreiben Java Basics - Anfänger-Themen 8
V Algorithmus in einer Methode ausführen Java Basics - Anfänger-Themen 3
M Implementierung des Knuth-Morris-Pratt-Algorithmus Java Basics - Anfänger-Themen 0
M Dijkstras Algorithmus Java Basics - Anfänger-Themen 5
S Zusammenhang Datenstruktur/Algorithmus Java Basics - Anfänger-Themen 1
M Simulation - Algorithmus Java Basics - Anfänger-Themen 3
F Erste Schritte Hilfe beim Algorithmus finden Java Basics - Anfänger-Themen 8
D Algorithmus für Punkte auf einem Kreis Java Basics - Anfänger-Themen 0
D Algorithmus zu gegebener Laufzeit implementieren Java Basics - Anfänger-Themen 1
B Doppelte Werte aus Array entfernen ohne Import - Algorithmus Java Basics - Anfänger-Themen 5
C Ideen für einen Algorithmus Java Basics - Anfänger-Themen 1
F Best Practice Algorithmus optimieren - Binaeruhr Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben