Slight
Cadet 2nd Year
- Registriert
- Juni 2015
- Beiträge
- 19
Halloo 
Ich habe eine topologische Sortierung programmiert, eigentlich funktioniert auch alles, aber wenn es mehrere Knoten mit Eingangsgrad=0 gibt, soll der Knoten mit dem kleinsten Index genommen werden.
Ich habe mir das jetzt so vorgestellt, dass die erste for-Schleife zuerst den ersten Knoten mit Eingangsgrad=0 findet, also auch den mit dem kleinsten Index, dann sollen ALLE Kanten die mit der Kante verbunden sind, entfernt werden, und der Knoten soll zu sortedNodes hinzugefügt werden. Nach meiner Ausgabe werden aber komischerweise direkt beide Knoten mit dem Eingangsgrad=0 entfernt, und auch nur je eine Kante. Das sieht man ja da, wo zum ersten Mal SortedNodes gefüllt ist mit 5 und 7. 7-6 und 5-1 wurden entfernt, aber nicht 5-4 und 7-8.
Mein eigentliches Problem ist aber, dass die 7 vor der 1 ausgegeben wird. Denn wenn die 5 entfernt wird, hat eigentlich die 1 schon den Eingangsgrad=0 und weil eben zuerst immer die mit dem kleinsten Index entfernt werden sollen, sollte dann nach der 5 die 1 kommen, es wird aber die 7 ausgegeben, weil die Schleife ja einmal komplett durchläuft und dann ja natürlich nach der 5 erst die 7 findet und nicht die 1.
Ich wollte mein Problem lösen, indem ich die Schleife abbreche, sobald die 5 gefunden wurde, damit sie wieder bei 0 beginnt, eigentlich müsste doch dann die 1 vor der 7 gefunden werden oder? Jedoch habe ich das schon mit break versucht, die Ausgabe ändert sich zwar, aber die 1 steht immer noch nach der 7. Kann mir da vielleicht jemand weiterhelfen?
Meine Ausgabe:
Anfangswerte:
Nodes:[1, 6, 4, 2, 5, 9, 7, 3, 8]
Edges:[1-2, 1-3, 7-6, 7-8, 7-4, 5-4, 5-1, 6-8, 6-2, 5-6, 2-9]
Eingangsgrad von1:1
Eingangsgrad von6:2
Eingangsgrad von4:2
Eingangsgrad von2:2
Eingangsgrad von5:0
Eingangsgrad von9:1
Eingangsgrad von7:0
Eingangsgrad von3:1
Eingangsgrad von8:2
Schleifen-Durchläufe ergeben folgendes:
Sorted Nodes:[]
Edges:[1-2, 1-3, 7-6, 7-8, 7-4, 5-4, 5-1, 6-8, 6-2, 5-6, 2-9]
Nodes:[1, 6, 4, 2, 5, 9, 7, 3, 8]
Sorted Nodes:[]
Edges:[1-2, 1-3, 7-6, 7-8, 7-4, 5-4, 5-1, 6-8, 6-2, 5-6, 2-9]
Nodes:[1, 6, 4, 2, 5, 9, 7, 3, 8]
Sorted Nodes:[]
Edges:[1-2, 1-3, 7-6, 7-8, 7-4, 5-4, 5-1, 6-8, 6-2, 5-6, 2-9]
Nodes:[1, 6, 4, 2, 5, 9, 7, 3, 8]
Sorted Nodes:[]
Edges:[1-2, 1-3, 7-6, 7-8, 7-4, 5-4, 5-1, 6-8, 6-2, 5-6, 2-9]
Nodes:[1, 6, 4, 2, 5, 9, 7, 3, 8]
Sorted Nodes:[5, 7]
Edges:[1-2, 1-3, 7-8, 5-4, 6-8, 6-2, 2-9]
Nodes:[1, 6, 4, 2, 9, 3, 8]
Sorted Nodes:[5, 7, 1]
Edges:[1-3, 5-4, 6-8, 6-2, 2-9]
Nodes:[6, 4, 2, 9, 3, 8]
Sorted Nodes:[5, 7, 1]
Edges:[5-4, 6-8, 6-2, 2-9]
Nodes:[6, 4, 2, 9, 3, 8]
Sorted Nodes:[5, 7, 1]
Edges:[6-8, 6-2, 2-9]
Nodes:[6, 4, 2, 9, 3, 8]
Sorted Nodes:[5, 7, 1, 3, 6]
Edges:[6-2, 2-9]
Nodes:[4, 2, 9, 8]
Sorted Nodes:[5, 7, 1, 3, 6]
Edges:[2-9]
Nodes:[4, 2, 9, 8]
Sorted Nodes:[5, 7, 1, 3, 6, 8, 4]
Edges:[2-9]
Nodes:[2, 9]
Sorted Nodes:[5, 7, 1, 3, 6, 8, 4, 2]
Edges:[]
Nodes:[9]
Sorted Nodes:[5, 7, 1, 3, 6, 8, 4, 2, 9] Das ist nun die topologische Sortierung, aber die 1 sollte auf jeden Fall vor der 7 sein.
Liebe Grüße
Ich habe eine topologische Sortierung programmiert, eigentlich funktioniert auch alles, aber wenn es mehrere Knoten mit Eingangsgrad=0 gibt, soll der Knoten mit dem kleinsten Index genommen werden.
Ich habe mir das jetzt so vorgestellt, dass die erste for-Schleife zuerst den ersten Knoten mit Eingangsgrad=0 findet, also auch den mit dem kleinsten Index, dann sollen ALLE Kanten die mit der Kante verbunden sind, entfernt werden, und der Knoten soll zu sortedNodes hinzugefügt werden. Nach meiner Ausgabe werden aber komischerweise direkt beide Knoten mit dem Eingangsgrad=0 entfernt, und auch nur je eine Kante. Das sieht man ja da, wo zum ersten Mal SortedNodes gefüllt ist mit 5 und 7. 7-6 und 5-1 wurden entfernt, aber nicht 5-4 und 7-8.
Mein eigentliches Problem ist aber, dass die 7 vor der 1 ausgegeben wird. Denn wenn die 5 entfernt wird, hat eigentlich die 1 schon den Eingangsgrad=0 und weil eben zuerst immer die mit dem kleinsten Index entfernt werden sollen, sollte dann nach der 5 die 1 kommen, es wird aber die 7 ausgegeben, weil die Schleife ja einmal komplett durchläuft und dann ja natürlich nach der 5 erst die 7 findet und nicht die 1.
Ich wollte mein Problem lösen, indem ich die Schleife abbreche, sobald die 5 gefunden wurde, damit sie wieder bei 0 beginnt, eigentlich müsste doch dann die 1 vor der 7 gefunden werden oder? Jedoch habe ich das schon mit break versucht, die Ausgabe ändert sich zwar, aber die 1 steht immer noch nach der 7. Kann mir da vielleicht jemand weiterhelfen?
Code:
while(!(G.getNodes().isEmpty()))
{
for (int i=0; i<G.getNodes().size(); i++)
{
if(G.getNodes().get(i).indegree==0)
{
sortedNodes.add(G.getNodes().get(i));
G.removeNode(G.getNodes().get(i));
}
for (int j=0; j<G.getEdges().size(); j++)
{
if(sortedNodes.contains(G.getEdges().get(j).getSecondNode())||sortedNodes.contains(G.getEdges().get(j).getFirstNode()))
{
G.removeEdge(G.getEdges().get(j));
}
indegree(G);
}
System.out.println("Sorted Nodes:"+sortedNodes+"\n"+ "Edges:"+G.getEdges()+"\n"+ "Nodes:"+G.getNodes()+"\n");
}
}
System.out.println("Sorted Nodes:"+sortedNodes);
}
Meine Ausgabe:
Anfangswerte:
Nodes:[1, 6, 4, 2, 5, 9, 7, 3, 8]
Edges:[1-2, 1-3, 7-6, 7-8, 7-4, 5-4, 5-1, 6-8, 6-2, 5-6, 2-9]
Eingangsgrad von1:1
Eingangsgrad von6:2
Eingangsgrad von4:2
Eingangsgrad von2:2
Eingangsgrad von5:0
Eingangsgrad von9:1
Eingangsgrad von7:0
Eingangsgrad von3:1
Eingangsgrad von8:2
Schleifen-Durchläufe ergeben folgendes:
Sorted Nodes:[]
Edges:[1-2, 1-3, 7-6, 7-8, 7-4, 5-4, 5-1, 6-8, 6-2, 5-6, 2-9]
Nodes:[1, 6, 4, 2, 5, 9, 7, 3, 8]
Sorted Nodes:[]
Edges:[1-2, 1-3, 7-6, 7-8, 7-4, 5-4, 5-1, 6-8, 6-2, 5-6, 2-9]
Nodes:[1, 6, 4, 2, 5, 9, 7, 3, 8]
Sorted Nodes:[]
Edges:[1-2, 1-3, 7-6, 7-8, 7-4, 5-4, 5-1, 6-8, 6-2, 5-6, 2-9]
Nodes:[1, 6, 4, 2, 5, 9, 7, 3, 8]
Sorted Nodes:[]
Edges:[1-2, 1-3, 7-6, 7-8, 7-4, 5-4, 5-1, 6-8, 6-2, 5-6, 2-9]
Nodes:[1, 6, 4, 2, 5, 9, 7, 3, 8]
Sorted Nodes:[5, 7]
Edges:[1-2, 1-3, 7-8, 5-4, 6-8, 6-2, 2-9]
Nodes:[1, 6, 4, 2, 9, 3, 8]
Sorted Nodes:[5, 7, 1]
Edges:[1-3, 5-4, 6-8, 6-2, 2-9]
Nodes:[6, 4, 2, 9, 3, 8]
Sorted Nodes:[5, 7, 1]
Edges:[5-4, 6-8, 6-2, 2-9]
Nodes:[6, 4, 2, 9, 3, 8]
Sorted Nodes:[5, 7, 1]
Edges:[6-8, 6-2, 2-9]
Nodes:[6, 4, 2, 9, 3, 8]
Sorted Nodes:[5, 7, 1, 3, 6]
Edges:[6-2, 2-9]
Nodes:[4, 2, 9, 8]
Sorted Nodes:[5, 7, 1, 3, 6]
Edges:[2-9]
Nodes:[4, 2, 9, 8]
Sorted Nodes:[5, 7, 1, 3, 6, 8, 4]
Edges:[2-9]
Nodes:[2, 9]
Sorted Nodes:[5, 7, 1, 3, 6, 8, 4, 2]
Edges:[]
Nodes:[9]
Sorted Nodes:[5, 7, 1, 3, 6, 8, 4, 2, 9] Das ist nun die topologische Sortierung, aber die 1 sollte auf jeden Fall vor der 7 sein.
Liebe Grüße
Zuletzt bearbeitet: