Hallo,
ich soll einen rekursiven Tiefensuche programmieren.
Mein Programm kann folgendes:
-Mittels eines Buttons kann ich GraphNodes in meinen Graphen einfügen
-Mittels eines weiteren Buttons kann ich zwischen diesen Kanten in den Graphen einfügen
-jetzt kann er mit der Methode wegsucheIterativ den kürzesten Weg zwischen zwei Knoten Suchen.
Problem: er sagt mir immer, dass der Graph nicht zusammenhängend ist. Das heißt, dass bei der Erstellung der Buttons was schief geht. Ich weiß aber nicht was -.-'
Wär cool wenn ihr mir dabei helfen könnt, muss das dringend feritg kriegen :-]
Gruß Kampfzwereg
ich soll einen rekursiven Tiefensuche programmieren.
Mein Programm kann folgendes:
-Mittels eines Buttons kann ich GraphNodes in meinen Graphen einfügen
-Mittels eines weiteren Buttons kann ich zwischen diesen Kanten in den Graphen einfügen
-jetzt kann er mit der Methode wegsucheIterativ den kürzesten Weg zwischen zwei Knoten Suchen.
Problem: er sagt mir immer, dass der Graph nicht zusammenhängend ist. Das heißt, dass bei der Erstellung der Buttons was schief geht. Ich weiß aber nicht was -.-'
Wär cool wenn ihr mir dabei helfen könnt, muss das dringend feritg kriegen :-]
Gruß Kampfzwereg
Java:
private void jBknotenActionPerformed(java.awt.event.ActionEvent evt) {
myGraph.addNode(new GraphNode(jTFname.getText()));
anzahlKnoten++;
System.out.println("Knoten hinzugefügt");
}
private void jBkanteActionPerformed(java.awt.event.ActionEvent evt)
{
if(myGraph.hasNode(jTFvon.getText()) && myGraph.hasNode(jTFnach.getText()))
{
myGraph.addEdge(myGraph.getNode(jTFvon.getText()), myGraph.getNode(jTFnach.getText()), Integer.parseInt(jTFgewicht.getText()));
System.out.println("Kante hinzugefügt");
}
}
private void jBwegActionPerformed(java.awt.event.ActionEvent evt) {
if(myGraph.hasNode(jTFstart.getText()) && myGraph.hasNode(jTFziel.getText()))
{
GraphNode von = new GraphNode(jTFstart.getText());
GraphNode bis = new GraphNode(jTFziel.getText());
wegsucheIterativ(von, bis);
}
public void wegsucheIterativ(GraphNode pStart, GraphNode pZiel)
{
myGraph.resetMarks();
Stack myStack = new Stack();
GraphNode aktuell = pStart;
jTAweg.setText("");
if(aktuell!=null)
{
myStack.push(aktuell);
aktuell.mark();
jTAweg.append("Startknoten "+aktuell.getName()+"\n");
}
else
{
jTAweg.append("Es gibt keinen Startknoten\n");
}
while(!myGraph.allNodesMarked()&& !myStack.isEmpty())
{
List nachbarn = myGraph.getNeighbours(aktuell);
nachbarn.toFirst();
boolean wegGefunden = false;
while(!wegGefunden && nachbarn.hasAccess())
{
if(!((GraphNode)(nachbarn.getObject())).isMarked())
{
if(aktuell !=null && (GraphNode)(nachbarn.getObject())!=null)
{
jTAweg.append("--> "+aktuell.getName()+" --> "+((GraphNode)(nachbarn.getObject())).getName()+"\n");
}
aktuell=(GraphNode)(nachbarn.getObject());
myStack.push(aktuell);
aktuell.mark();
wegGefunden =true;
}
nachbarn.next();
}
if(pZiel!=null&&aktuell.getName()==pZiel.getName())
{
myStack=new Stack();
wegGefunden =true;
jTAweg.append("Zielknoten : "+pZiel.getName());
}
if(!wegGefunden )
{
myStack.pop();
aktuell=(GraphNode)(myStack.top());
if(aktuell!=null)
{
jTAweg.append(aktuell.getName()+"\n <-- " +"\n");
}
}
}
if(!myGraph.allNodesMarked() && pStart != null)
{
jTAweg.append("Es liegt ein nicht zusammenhängender Graph vor\n");
}
}