Dun ist eine fokussierte oder unorientierte gewichtete Zählung mit n Tops.
Der Algorithmus ermöglicht einen Abstand von jedem Top und arbeitet mit negativen Rippen.
Algorithm rückt nacheinander alle I um, durch die ein kürzerer Weg zu V als jetzt verfügbar ist.

Aktuelle (sine) Route und möglicherweise kürzer (rot).

Durchführung
Bei der Eingabe des Programms handelt es sich um eine Box in Form einer Matrix von Nebenität, einer zweidimensionalen d[][] n x n, in der jedes Element die Rippenlänge zwischen den jeweiligen Spitzen einstellt.
Wenn zwischen den beiden Spitzen keine Rippe vorhanden ist, gibt es in der Matrix der Verbindungen (z.B. INT_MAX in "limits.h) eine große Anzahl, dass sie länger als die Länge einer beliebigen Reise in dieser Box sein würde); dann wäre diese Rippe immer unangebracht zu nehmen, und der Algorithmus würde richtig funktionieren.
Aber mit zwei endlosen Enden, kann es ein Nachfüllen Int und wir werden einen negativen Einfluss auf den Ausgang haben, so wäre es gut, durch eine zusätzliche Überprüfung unterstützt werden:
wenn (seufzt)dgl.(schreit)I!(schreit)k.! INT_MAX " d(schreit)k.!(schreit)J! INT_MAX)
Am Ende wird der Algorithmus gesehen:
für (seufzt)in =0); kón; ++k)für (seufzt)in =0); i copy; ++i)für (seufzt)in j)0); j Besuch; ++j)wenn (seufzt)dgl.(schreit)I!(schreit)k.! INT_MAX " d(schreit)k.!(schreit)J! INT_MAX)wenn(d[i][k]+d[k][j] À d[i][j]
dgl.(schreit)I!(schreit)J! = d(schreit)I!(schreit)k.! + d(schreit)k.!(schreit)J!;


Beispielsweise ist die Anzahl:



Die Anfangsgewichtsmatrix wird dann sein:
Spitzenzahl123
10)8)5.
230)INT_MAX
3INT_MAX20)

Nach der 1. Teration:
Spitzenzahl123
10)8)5.
230)8)
3INT_MAX20)

Nach 2. Teration:
Spitzenzahl123
10)8)5.
230)8)
35.20)


Nach der 3. Iteration:
Spitzenzahl123
10)75.
230)8)
35.20)



Wenn es Zyklen von negativem Gewicht in der Box, der formale Algorithmus Floyd-Worschella gilt nicht für eine solche Zeile.

Tatsächlich funktioniert der Algorithmus für diejenigen Spitzen i und j, zwischen denen das negative Gewicht nicht erreicht werden kann.

Für die gleichen Paare von Peaks, für die keine Antwort besteht (wegen des negativen Zyklus zwischen ihnen), wird der Floyd-Algorithmus eine Anzahl (möglicherweise negativ, aber nicht notwendig) finden. Allerdings kann der Floyd-Algorithmus verbessert werden, so dass er solche Peaks für sie sorgfältig verarbeiten und entfernen kann, beispielsweise- Ja.

Beispielsweise kann Folgendes geschehen:Kriterium"Nein." Okay, lassen Sie uns einen regelmäßigen Floyd-Algorithmus auf dieser Zählung haben. Dann gibt es keinen kürzesten Weg zwischen den Oberseiten von i und j zu der Zeit und nur, wenn es einen solchen Peak t, erzielbar von i und erzielbar j, für den es erfüllt ist- Ja.

Darüber hinaus sollte mit dem Floyd-Algorithmus für negative Zyklenzahlen daran erinnert werden, dass die im Laufe der Operation auftretenden Abstände sehr weit bis minus, exponentiell mit jeder Phase gehen können. Maßnahmen sollten daher gegen die Anzahl der überfüllten Maßnahmen ergriffen werden, die alle Abstände auf jeden Wert begrenzen (z.B.)- Ja.)

Eine seltene Lösung kann so beschrieben werden, dass
Nachdem Floyd-Worschellas Algorithmus für die vordere Reihe funktioniert, nehmen wir alle Spitzen.- Ja.Und für jedes dieser Paare überprüfen wir, ob die kürzeste Route von i zu j oder nicht. Wir nehmen den dritten Top-T dafür, und wenn es sich herausstellt, sie zu sein.- Ja.(d.h., es ist im negativen Gewichtszyklus) und es ist von und von i erzielbar j ist der Pfad- Ja.kann eine unendlich kleine Länge haben.

[i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][

Eine detailliertere Suche nach einem negativen Zyklus kann hier gelesen werden: http://e-maxx.ru/algo/export_ford_bellman

Der Weg durch den negativen Gewichtszyklus wird unmöglich.