Ich habe ein Diagramm mit ungefähr einer Milliarde Eckpunkten, von denen jeder zufällig mit ungefähr 100 anderen Eckpunkten verbunden ist.
Ich möchte die Länge des kürzesten Weges zwischen zwei Punkten finden. Der tatsächlich verwendete Pfad ist mir egal.
Anmerkungen:
- Manchmal werden Kanten abgetrennt oder hinzugefügt. Dies geschieht etwa 500 Mal seltener als bei Suchvorgängen. Es ist auch in Ordnung, Kantenänderungen zu stapeln, wenn Sie dadurch eine bessere Leistung erzielen.
- Ich kann das Diagramm vorverarbeiten.
- Wenn es mehr als 6 Schritte dauert, können Sie einfach mit unendlich zurückkehren.
- Es ist akzeptabel, in 0,01% der Fälle falsch zu liegen, aber nur, wenn eine zu lange Länge zurückgegeben wird.
- Alle Kanten haben eine Länge von 1.
- Alle Kanten sind bidirektional.
Ich suche einen Algorithmus. Pseudocode, englische Beschreibungen und aktueller Code sind alle großartig.
Ich könnte A * verwenden, aber das scheint für die Pfadfindung optimiert zu sein.
Ich habe über die Verwendung des Dijkstra-Algorithmus nachgedacht , aber es gibt einen Schritt, bei dem das Attribut für den kürzesten gefundenen Pfad jedes Scheitelpunkts auf unendlich gesetzt werden muss
(Wenn Sie sich über den Anwendungsfall wundern, ist er für den Underhanded C-Wettbewerb gedacht.)