日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【算法】单源最短路径和任意两点最短路径总结(补增:SPFA)

發布時間:2024/4/19 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【算法】单源最短路径和任意两点最短路径总结(补增:SPFA) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【Bellman-Ford算法】

    【算法】Bellman-Ford算法(單源最短路徑問題)(判斷負圈)

結構:

#define MAX_V 10000 #define MAX_E 50000 int V,E; //頂點和邊的數量 struct edge{int from,to,cost; }; edge es[MAX_E];//邊集 int d[MAX_V]; //d[i]表示從某個點出發到i的最短路徑

算法特點:1.每次都用所有的邊更新所有的邊,直到無可更新為止。

     2.無負圈最多更新 V-1 次,否則有負圈。

【dijkstra算法】

    【算法】Dijkstra算法(單源最短路徑問題)(路徑還原) 鄰接矩陣和鄰接表實現

結構1:

#define MAX_V 10000 #define MAX_E 50000 int cost[MAX_V][MAX_V]; //cost[u][v]表示e = (u,v)的權值 int d[MAX_V]; //源點s出發的最短距離 bool used[MAX_V]; //標記使用過的點 int V; //頂點數

算法特點:1.每次都找沒使用過的 d 最小的點,用這個點更新其他點。

     2.不能解決有負圈的圖。

結構2:

#define MAX_V 10000 #define MAX_E 50000 int V; //頂點數 int d[MAX_V]; // d[i]表示i離源點的最短距離 struct edge{ int to,cost; }; typedef pair<int, int> P; //first是最短距離,second是頂點的編號 vector <edge> G[MAX_V]; // 邊集

算法特點:1.用之前更新過的點,來更新其他點,直到無點可更新。

     2.不能解決有負圈的圖。

【Floyd-Warshall算法】

    【算法】Floyd-Warshall算法(任意兩點間的最短路問題)(判斷負圈)

結構:

#define MAX_V 10000 #define MAX_E 50000 int d[MAX_V][MAX_V]; // d[u][v]表示邊e=(u,v)的權值(不存在時設為INF,不過d[i][i] = 0) int V; // 頂點數

算法特點:1.dp[i][j] = min(dp[i][j] , dp[i][k] + d[k][j]);

       基于只有k-1個點的情況,從加入第k個點和不加第k個點中做選擇。

     2.能解決有負圈的圖,如果d[i][i]出現負數說明有負圈。

拜讀了一位大神的blog學會了SPFA算法:

    【最短路算法】Dijkstra+heap和SPFA的區別

稠密圖用Dijkstra,稀疏圖用SPFA。

總結

以上是生活随笔為你收集整理的【算法】单源最短路径和任意两点最短路径总结(补增:SPFA)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。