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ührungBei 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:
Spitzenzahl | 1 | 2 | 3 |
1 | 0) | 8) | 5. |
2 | 3 | 0) | INT_MAX |
3 | INT_MAX | 2 | 0) |
Nach der 1. Teration:
Spitzenzahl | 1 | 2 | 3 |
1 | 0) | 8) | 5. |
2 | 3 | 0) | 8) |
3 | INT_MAX | 2 | 0) |
Nach 2. Teration:
Spitzenzahl | 1 | 2 | 3 |
1 | 0) | 8) | 5. |
2 | 3 | 0) | 8) |
3 | 5. | 2 | 0) |
Nach der 3. Iteration:
Spitzenzahl | 1 | 2 | 3 |
1 | 0) | 7 | 5. |
2 | 3 | 0) | 8) |
3 | 5. | 2 | 0) |