(任意兩點(diǎn)間最短路)Floyd-Warshall算法

Floyd-Warshall算法使用DP方法來求解任意兩點(diǎn)間的最短路問題。
i到j(luò)的最短路分正好經(jīng)過頂點(diǎn)k一次和完全不經(jīng)過頂點(diǎn)k兩種情況來討論。不斷的進(jìn)行d[i][j] = min(d[i][j], d[i][k] + d[k][j])的更新來實(shí)現(xiàn),復(fù)雜度是O(n ^ 3)。
此算法可以處理負(fù)權(quán)邊,也可以判斷圖中是否有負(fù)圈,只需檢查是否存在d[i][i]是負(fù)數(shù)的頂點(diǎn)i就可以了。

//Floyd-Warshall
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
const int
MAXV = 105, MAXE = 10005, INF = 0x3f3f3f3f;

int v, e;
int d[MAXV][MAXV];

bool Floyd_Warshall() {
    for(int k = 1; k <= v; ++k) {
        for(int i = 1; i <=v; ++i) {
            for(int j = 1; j<= v; ++j) {
                d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
            }
        }
    }
    for(int i = 1; i <= v; ++i) 
        if(d[i][i] < 0)
            return false;
    return true; 
}
int main() {
    while(scanf("%d%d", &v, &e) != EOF && v && e) {
        for(int i = 1; i <= v; ++i) {
            for(int j = 1; j <= v; ++j) {
                d[i][j] = d[j][i] = (i == j ? 0 : INF);
            }
        }
        for(int i = 1; i <= e; ++i) {
            int f, t, c;
            scanf("%d%d%d",&f, &t, &c);
            d[f][t] = d[t][f] = c;
        }
        if(Floyd_Warshall())
            printf("%d\n", d[1][v]);
        else
            printf("有負(fù)圈\n");
    }
    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 歸去來兮。 1.1 說明 本篇為《挑戰(zhàn)程序設(shè)計(jì)競賽(第2版)》[http://www.ituring.com.cn...
    尤汐Yogy閱讀 14,451評論 0 160
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,769評論 0 33
  • 動態(tài)規(guī)劃(Dynamic Programming) 本文包括: 動態(tài)規(guī)劃定義 狀態(tài)轉(zhuǎn)移方程 動態(tài)規(guī)劃算法步驟 最長...
    廖少少閱讀 3,327評論 0 18
  • 本文將介紹三種常見的最短路算法:Dijkstra,F(xiàn)loyd,SPFA Dijkstra Dijkstra是有向圖...
    maxkibble閱讀 1,538評論 0 0
  • Floyd 算法 簡介 Floyd 算法又稱為插點(diǎn)法,是一種利用動態(tài)規(guī)劃的思想尋找給定的加權(quán)圖中多源點(diǎn)之間最短路徑...
    廖少少閱讀 8,669評論 0 1