Algoritmul lui Floyd - saturație în rusă

De fapt, am două întrebări despre acest algoritm, sper pentru ajutorul tău. 1) Graful este dat de o matrice de adjacitate, este necesar să se găsească vârfurile între care există o cale arbitrar mică (adică sunt prezente cicluri de greutate negativă). Iată o bucată de cod:







d este matricea de adjuvant, INF = 1e1000, deuce trebuie să fie scris la matricea a dacă există o cale arbitrar mică între i și j.

Codul nu funcționează corect, care este eroarea mea? Am folosit acest material:

În grafic există cicluri de greutate negativă.

În acest caz, este posibil să existe o cale scurtă arbitrar între unele perechi de vârfuri. Nu, astfel de perechi sunt ușor pe matricea căilor "cele mai scurte", construite cu algoritmul Floyd. Există declarații:







Dacă există un ciclu de greutate negativă care trece prin vertexul i, atunci ai va fi mai mic decât 0. Există o cale arbitrar mică între o pereche de vârfuri (i, j) dacă și numai dacă există o cale de la i la j care conține un ciclu de greutate negativă sau , cu alte cuvinte, există un vertex k astfel încât să existe o cale de la i la k, de la k la j și există un ciclu de greutate negativă care trece prin k

2) Este necesar să găsiți căile maxime între toate perechile de vârfuri. Am încercat acest lucru: umplut matricea contiguity opusă distanțelor de intrare și am folosit următorul cod:

Nu are sens. Care sunt greșelile mele?

După muncă Floyd algoritm în matricea este d i pentru fiecare nod stocat lungimea căii minimă pentru fiecare nod j = 1..n (n - numărul de noduri). Prin urmare, răspunsul la prima întrebare este:

Răspunsul la a doua întrebare trebuie să fie să fie scrise în opoziție matricea adiacenta de valori, sau a schimba semnul> în cazul în care (d [i] [j]> d [i] [k] + d [k] [j]) privind marca <, но не два варианта вместе, иначе получается тоже самое, что и поиск минимального пути :).







Articole similare

Trimiteți-le prietenilor: