Ich versuche weiterhin, dies zu googeln, aber die Ergebnisse, die ich finde, fügen nur meiner Verwirrung hinzu. Es scheint, dass es möglicherweise für beide verwendet werden kann? Wenn ja, für welches ist es standardmäßig vorgesehen und was muss geändert werden, damit es nicht-standardmässig funktioniert (egal ob gerichtet oder ungerichtet)?Ist Dijkstras Algorithmus für gerichtete oder ungerichtete Graphen?
Edit: als Referenz, ich hatte ein Problem im letzten Semester, wo ich eine Liste wie diese (Flughäfen) gegeben wurde:
AER,KZN,1.8835
ASF,KZN,1.3005
ASF,MRV,1.1204
CEK,KZN,1.9263
CEK,OVB,1.6733
DME,KZN,1.7892
DME,NBC,2.2319
DME,UUA,2.3786
EGO,KGD,1.4649
EGO,KZN,1.2603
GYD,NBC,2.0755
Mir wurde gesagt, es gerichtet war, und fragte den kürzesten Weg zu finden. Ich habe es in einen Dijkstra-Algorithmus eingegeben, den ich auf Github gefunden habe (es war ein Open-Computer Midterm, also hatten wir nicht annähernd genug Zeit, um den Algorithmus von Grund auf neu zu schreiben) und mein Professor sagte, dass der kürzeste Weg falsch war und dass es war nicht einmal ein möglicher Weg, weil die Liste gerichtet sein sollte. Ich war mir nicht sicher, ob ich dann den Algorithmus oder die Liste modifizieren sollte, um diese Korrektur vorzunehmen. Es endete damit, dass der zweitkürzeste Pfad, den er zurückgab, tatsächlich der kürzeste Weg war, aber ich frage mich immer noch, was das Problem war.
Also, wenn meine Liste nicht eine doppelte, aber umgekehrte Eingabe für jede Kante enthält, sollte es mir den direkten kürzesten Weg geben? Weil mir gesagt wurde, dass die Liste, die mir gegeben wurde, gerichtet war, aber die Implementierung von Dijkstras, die ich verwendete, gab mir einen ungerichteten kürzesten Weg. – Austin
Nun, das klingt wie die Implementierung, die Sie gefunden haben, interpretiert die Einträge in Ihrer Liste als ungerichtet, was nicht das ist, was Sie wollen, also sollten Sie den Algorithmus wahrscheinlich selbst implementieren. Die, die ich kenne, verwenden im Allgemeinen nur eine Adjazenzliste (das ist eine Liste, die Informationen darüber enthält, welche Knoten Sie von einem bestimmten Knoten aus erreichen können * => die Verbindungen sind gerichtet *). Deshalb habe ich gesagt, dass Sie nichts tun müssen, damit es für ungerichtete Graphen funktioniert. Wenn Ihr Algorithmus jedoch aus irgendeinem Grund die Verbindungen automatisch als bidirektional interpretiert, muss er geändert werden. – Keiwan
@Keiwan Dieser Beitrag https://Stackoverflow.com/questions/22649416/why-cant-prims-or-kruskals-algorithms-be-used-on-a-directed-graph sagt, dass Prims Algorithmus für gerichtete Graphen fehlschlagen wird. So wird Dijkstras, das fast wie Prims ist, auch für die in der Post gegebenen Beispiele versagen. – WSS