亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Floyd算法--多源最短路徑

2019-11-11 03:51:33
字體:
來源:轉載
供稿:網友

在一個給定的圖中求兩個頂點的最短路徑的算法一直是比較常用和比較重要的算法。主要的求最短路徑的算法有Floyd算法、Dijkstra算法和Bellman-Ford算法等等,本篇我們先來看一下Floyd算法:

首先我們知道,要求一個圖中兩個頂點中的最短路徑,除了計算出這兩個頂點的直接路徑,還可以借助其他的頂點作為“跳板”,來看看能不能使得這兩點的路徑變短,來看一個例子:

這里寫圖片描述

假設這是一個給定的無向圖圖(畫的不好,大家多多擔待),圖中共有4個頂點(A、B、C、D),圖中的邊共有:A-->B(10)、A-->C(2)、C-->B(6)、C-->D(1)、D-->B(2)五條邊(嚴格來說有10條邊,因為是無向圖),如果我們要求頂點A和頂點B的最短路徑該怎么辦呢,明顯:頂點A和頂點B直接相連,距離為10,然而我們注意到頂點A和頂點C相連,頂點C和頂點B相連:A-->C-->B的距離一共是8,明顯比頂點A直接到頂點B更短。再觀察一下,我們還可以發現頂點C和頂點D直接相連,D頂點和頂點B直接相連:A-->C-->D-->B的距離一共是5,又是一條更短的路徑!之后我們找不到頂點A到頂點B還有比距離5更短的路徑了,那么,在這個圖中頂點A到頂點B的最短路徑就是5

在上面的那個簡單的例子中,求頂點A到頂點B的最短路徑,我們正是利用了其他的頂點作為“跳板”,來尋找是否有更短的路徑,Floyd算法的核心思想也正是這個:借助圖的其它頂點來求目標頂點之間的最短路徑 對于上面的例子,假設頂點A為1號頂點,頂點B為2號頂點,頂點的總數為n,e[n][n]為圖的鄰接矩陣。那么我們可以用代碼來描述剛剛的過程:

for(int i = 1; i <= n; i++){ if(e[1][2] > e[1][i] + e[i][2]) { /* 這段代碼的意思是:循環遍歷圖中的所有頂點 * 如果利用圖中的其它頂點可以使得頂點A到頂點B的路徑變短, * 那么更新頂點A到頂點B的最短路徑 */ e[1][2] = e[1][i] + e[i][2]; }}

對于上面的代碼,其實當i等于1的時候是沒有意義的:頂點A借助頂點A來嘗試是否能使得頂點A到頂點B的最短路徑變短(自己借助自己有什么意義呢),不過我們這里的重點并不在這,那么現在我們要求圖中的所有頂點到其他頂點的最短路徑該怎么辦呢,按照剛剛的思路,我們可以大概的寫出代碼:

for(int i = 1; i <= n; i++){ for(int j = 1; j <= n; j++) { for(int k = 1; k <= n; k++) { if(e[j][k] > e[j][i] + e[i][k]) { e[j][k] = e[j][i] + e[i][k]; } } }}

其實很好理解,就是在原來的基礎上嵌套了一個雙重循環,這個雙重循環是為了遍歷圖中的任意兩個頂點,然后再利用最外面的一重循環來尋找最短路徑,整個代碼理解起來就是:借助前 i 個頂點來尋找圖中的任意兩個定點的最短路徑。 Ok, 其實這就是Floyd算法的核心代碼,如果你把不需要的大括號去掉(這里只是為了代碼美觀),你會發現這個算法只有5行!

下面給出完整的Floyd代碼:

#include <iostream>using namespace std;const int inf = 999999999; // 模擬無窮大(表示圖的兩個頂點沒有直接相連)const int N = 1000; // 圖的頂點個數最多為1000個int e[N][N]; // 圖的鄰接矩陣int main(){ int n, m; // 圖的頂點個數和邊的條數(其實叫度的數目會更好) cin >> n >> m; for(int i = 1; i <= n; i++) // 初始化圖 { for(int j = 1; j <= n; j++) { if(i == j) { e[i][j] = 0; } else { e[i][j] = inf; } } } int x, y, w; // 記錄圖的每一條邊的信息 for(int i = 1; i <= m; i++) { cin >> x >> y >> w; e[x][y] = e[y][x] = w; } for(int i = 1; i <= n; i++) // Floyd算法核心代碼 { for(int j = 1; j <= n; j++) { for(int k = 1; k <= n; k++) { if(e[j][k] > e[j][i] + e[i][k]) { e[j][k] = e[j][i] + e[i][k]; } } } } for(int i = 1; i <= n; i++) // 輸出算法結束后的圖的鄰接矩陣信息 { for(int j = 1; j <= n; j++) { cout.width(4); cout << e[i][j] << " "; } cout << endl; } return 0;}

輸入我們上面的例子數據,運行結果: 這里寫圖片描述 Yes,完成,我們可以檢驗一下圖中的數據是否符合,確實是圖中所有兩個頂點之間的最短路徑。各位小伙伴可以自行檢驗一下。 那么Floyd算法的時間復雜度呢,在這個代碼中算法的時間復雜度是O(N^3),相比其他最短路算法,還是比較高的,但是這個算法可以求多源最短路徑,而且代碼相對簡單,所以這個算法還是較優的。 如果博客中有什么不正確的地方,還請多多指點。 謝謝觀看。。。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
岛国精品视频在线播放| 亚洲精品日韩欧美| 日韩最新在线视频| 国产69精品久久久久99| 国产精品伦子伦免费视频| 久久精品国产91精品亚洲| 成人黄色片网站| 国产精品成人aaaaa网站| 精品国产乱码久久久久久虫虫漫画| 久久久成人的性感天堂| 日韩中文字幕在线观看| 97成人精品区在线播放| 国产丝袜一区二区| 欧美日韩激情视频8区| 亚洲精品电影网站| 久久视频免费观看| 91精品国产自产91精品| 欧美精品videos性欧美| 欧美精品video| 日韩精品在线免费| 日韩中文字幕在线观看| 久久综合免费视频| 国产成人福利夜色影视| 欧美日韩亚洲成人| 亚洲欧美激情一区| 狠狠久久五月精品中文字幕| 中文字幕精品av| 欧美wwwwww| 亚洲在线一区二区| 91综合免费在线| 欧美日韩成人在线视频| 精品无人区太爽高潮在线播放| 久久久久中文字幕2018| 日韩欧美成人免费视频| 亚洲第一网站男人都懂| 色偷偷av亚洲男人的天堂| 日韩精品久久久久久福利| 91国产视频在线播放| 91亚洲精品视频| 国产亚洲精品美女久久久久| 96国产粉嫩美女| 丝袜情趣国产精品| 91香蕉亚洲精品| 中文字幕无线精品亚洲乱码一区| 午夜精品一区二区三区视频免费看| 精品国偷自产在线视频99| 国色天香2019中文字幕在线观看| 日韩av电影手机在线| 97超碰蝌蚪网人人做人人爽| 亚洲男人的天堂在线| 国产精品成人一区| 8090成年在线看片午夜| 国产suv精品一区二区三区88区| 成人高清视频观看www| 国产精品视频午夜| 久久精品影视伊人网| 欧美极品少妇与黑人| 丝袜一区二区三区| 欧美一区三区三区高中清蜜桃| 疯狂做受xxxx欧美肥白少妇| 日韩av手机在线| 欧洲永久精品大片ww免费漫画| 国产精品自产拍在线观| 97av在线视频免费播放| 亚洲人成电影网站色xx| 夜夜躁日日躁狠狠久久88av| 亚洲人成电影在线观看天堂色| 久久电影一区二区| 欧美一级免费视频| 久久久噜噜噜久久| 欧美日韩成人免费| 久久久久久综合网天天| 中文字幕免费精品一区| 亚洲成人精品视频| 中文字幕亚洲综合久久| 国产精品美乳在线观看| 欧美激情乱人伦| 久久国产一区二区三区| 国产精品扒开腿做爽爽爽视频| 精品人伦一区二区三区蜜桃免费| 国产91精品久久久久久| 亚洲美女精品成人在线视频| 欧美成人全部免费| 不卡av日日日| 精品精品国产国产自在线| 日韩中文字幕在线看| 欧美xxxx14xxxxx性爽| 久久91亚洲精品中文字幕奶水| 97精品在线视频| 国产精品视频xxxx| 欧美性xxxxx| 亚洲国产欧美一区二区三区同亚洲| 在线丨暗呦小u女国产精品| 97精品伊人久久久大香线蕉| 国产精品69精品一区二区三区| 亚洲综合中文字幕在线观看| 51精品国产黑色丝袜高跟鞋| 国产一区二区三区在线免费观看| 亚洲资源在线看| 国产精品免费视频久久久| 亚洲第一精品夜夜躁人人躁| 不卡在线观看电视剧完整版| 欧美在线性爱视频| 国产一区欧美二区三区| 欧美韩国理论所午夜片917电影| 亚洲无限乱码一二三四麻| 日韩欧美主播在线| 久久精品青青大伊人av| 日韩美女视频在线观看| 97视频免费在线观看| 视频直播国产精品| 亚洲精品午夜精品| 亚洲第一精品福利| 国产精品av电影| 欧美日韩福利电影| 日本成熟性欧美| 美女啪啪无遮挡免费久久网站| 国产精品午夜国产小视频| 久久亚洲一区二区三区四区五区高| 91久久精品日日躁夜夜躁国产| 国产精品美女午夜av| 色播久久人人爽人人爽人人片视av| 浅井舞香一区二区| 97在线看免费观看视频在线观看| 欧美精品在线免费| 欧美激情精品久久久久久免费印度| 欧美日韩综合视频网址| 国产97在线视频| 欧美精品18videosex性欧美| 亚洲欧洲av一区二区| 国产精品美女在线| 久久国产精品电影| 国产精品美女呻吟| 久久精品国产欧美亚洲人人爽| 亚洲综合在线小说| 久久久亚洲网站| 日韩精品在线电影| 欧美大人香蕉在线| xx视频.9999.com| 欧美成人免费一级人片100| 国产一区二区三区在线观看网站| 国产一区二区三区三区在线观看| 日韩中文字幕免费看| 国产一区二区香蕉| 欧美日韩免费区域视频在线观看| 奇门遁甲1982国语版免费观看高清| 久久视频这里只有精品| 中文字幕日韩在线观看| 欧美综合一区第一页| 色爱av美腿丝袜综合粉嫩av| 国产精品第三页| 26uuu久久噜噜噜噜| 日韩人体视频一二区| 国产精品久久久久999| 欧美在线免费观看| 精品成人国产在线观看男人呻吟| 欧美精品videofree1080p| 亚洲激情久久久| 日韩中文在线不卡| 精品呦交小u女在线| 欧美精品第一页在线播放| 日本一区二区在线免费播放| 亚洲欧美www| 97在线观看视频国产|