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

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

Dijkstra算法--單源最短路徑

2019-11-10 23:38:44
字體:
來源:轉載
供稿:網友

在http://blog.csdn.net/hacker_zhidian/article/details/54898064這一篇博客中總結了一下在求圖的最短路中的一個算法-Floyd算法,Floyd算法用于求圖的多源最短路徑(多源最短路徑:圖的所有頂點到其他頂點的最短路徑),時間復雜度和其他求最短路算法相比較高,如果一些題目只要求求單源最短路徑(單源最短路徑:圖的某個頂點到其他頂點的最短路徑)的話,Floyd算法顯然不是最好的選擇,那么今天我們來看一下另一個用于求單源最短路徑的算法:Dijkstra算法。

首先我們來看一個圖: 這里寫圖片描述 圖中共有A、B、C、D四個頂點,五條邊,假設我們現在要求頂點B到其他頂點的最短路徑,依據Dijkstra算法的原理:

首先我們先找到距離頂點B路徑最短的頂點,在這個圖中很明顯距離頂點B路徑最短的點為頂點D。之后,將頂點D做上訪問標記,并對圖中的所有頂點進行檢測,看看能否通過頂點D來縮短頂點B到其他頂點的路徑。很明顯,B–>D–>C(路徑為3)這條路的路徑小于B–>C(路徑為6)這條路的路徑,那么我們更新從頂點B到頂點C的最短路徑,頂點D的試探結束。我們可以將這個過程稱為“縮放”,現在,頂點D的“縮放”結束。之后我們繼續尋找距離頂點B路徑最短并且沒有被標記的頂點,現在距離頂點B路徑最短并且沒有被標記的頂點為頂點C(頂點D已經被標記了),同樣的重復“縮放”過程,直到圖中所有的頂點都被標記。

理解了上面的過程,我們就可以架構出大概的Dijkstra算法的代碼了:

/** n 代表圖的頂點總數* e[][] 代表圖的鄰接矩陣儲存* book[] 代表標記數組,標記頂點是否已經被選擇過* dis[] 數組儲存的是源點距離其他頂點的最短路徑*/for(int i = 1; i <= n - 1; i++) // 對除了頂點B以外的所有頂點進行“縮放”,所以是n-1次頂點縮放{ int min = inf; // inf 為無窮大 int u; // u為當前距離頂點B路徑最短的頂點 for(int j = 1; j <= n; j++) // 找到距離頂點B最短的頂點 { if(book[j] == 0 && dis[j] < min) { min = dis[j]; u = j; } } book[u] = 1; // 對要縮放的頂點進行標記 for(int k = 1; k <= n; k++) // 對這個距離頂點B最短的頂點進行縮放 { if(e[u][k] < inf) { if(dis[k] > dis[u] + e[u][k]) { dis[k] = dis[u] + e[u][k]; // 如果確實可以通過這個頂點的縮放來縮短最短路徑,那么更新最短路徑 } } }}

Ok,算法的核心代碼就是這些了,下面給出這個例子的完整代碼:

/** n 代表圖的頂點總數* e[][] 代表圖的鄰接矩陣儲存* book[] 代表標記數組,標記頂點是否已經被選擇過* dis[] 數組儲存的是源點距離其他頂點的最短路徑*/#include <iostream>using namespace std;const int N = 500;const int inf = 999999999;int e[N][N];int book[N];int dis[N];int main(){ int n, m, s; // 圖的頂點總數、邊的總數和源節點 cin >> n >> m>> s; for(int i = 1; i <= n; i++) { dis[i] = inf; // 初始化dis數組 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; } dis[s] = 0; for(int i = 1; i <= n - 1; i++) // 對除了源點以外的所有頂點進行“縮放”,所以是n-1次頂點縮放 { int min = inf; // inf 為無窮大 int u; // u為當前距離源點路徑最短的頂點 for(int j = 1; j <= n; j++) // 找到距離源點最短的頂點 { if(book[j] == 0 && dis[j] < min) { min = dis[j]; u = j; } } book[u] = 1; // 對要縮放的頂點進行標記 for(int k = 1; k <= n; k++) // 對這個距離源點最短的頂點進行縮放 { if(e[u][k] < inf) { if(dis[k] > dis[u] + e[u][k]) { dis[k] = dis[u] + e[u][k]; // 如果確實可以通過這個頂點的縮放來縮短最短路徑,那么更新最短路徑 } } } } for(int i = 1; i <= n; i++) // 輸出源點到其他頂點的最短路徑 { cout.width(-5); cout << dis[i] << " "; } cout << endl; return 0;}

接下來,我們將給出的例圖中的數據輸入并運行程序: 這里寫圖片描述 和預想的一樣,小伙伴們可以自己嘗試一下。 在這里,Dijkstra算法的時間復雜度為O(N^2),確實比Floyd算法小。當然,還有一點要注意,Dijkstra算法是不能解決具有負權邊的圖的。 如果博客中有什么不正確的地方,還請多多指點。 謝謝觀看。。。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产91成人video| 国产精品久久av| 日韩av免费在线看| 黄色精品在线看| 亚洲丝袜av一区| 国产成人极品视频| 国产中文字幕日韩| 国产亚洲精品久久| 欧美理论电影在线播放| www.xxxx精品| 亚洲国产精品一区二区三区| 国产精品自产拍在线观看中文| 亚洲理论电影网| 亚洲精品影视在线观看| 亚洲欧美激情另类校园| 久久av.com| www.日韩av.com| 狠狠躁夜夜躁久久躁别揉| 最新91在线视频| 91精品国产高清久久久久久91| 国产欧洲精品视频| 亚洲xxx大片| 色先锋资源久久综合5566| 国产精品美女主播在线观看纯欲| 国产亚洲成av人片在线观看桃| 精品久久久国产精品999| 欧美午夜精品在线| 久久久视频在线| 欧美日韩国产成人在线观看| 国产69久久精品成人看| 久久久久久久一| 亚洲偷欧美偷国内偷| 国产精品视频区| 91在线观看欧美日韩| 久久精品亚洲一区| 成人免费黄色网| 亚洲性日韩精品一区二区| 亚洲**2019国产| 色偷偷亚洲男人天堂| www.久久色.com| 国产欧美精品一区二区三区介绍| 91精品视频免费看| 日韩欧美成人免费视频| 中文字幕9999| 久久精品中文字幕免费mv| 中文字幕亚洲一区二区三区| 久久久国产91| 久久久女女女女999久久| 亚洲国产精品嫩草影院久久| 亚洲情综合五月天| 国产精品69久久久久| 日本久久精品视频| 欧洲成人免费视频| 国产精品视频自在线| 91久久国产婷婷一区二区| 国产一区二区三区在线看| 国产免费一区视频观看免费| 欧美成人亚洲成人| 成人av电影天堂| 成人午夜激情免费视频| 亚洲国产精品系列| 成人综合国产精品| 欧美一区二区三区免费观看| 欧美激情a∨在线视频播放| 久久手机免费视频| 国产精品视频26uuu| 国产精品激情av电影在线观看| 亚洲精品国产综合久久| 亚洲bt天天射| 精品久久久中文| 国模精品视频一区二区| 国产精品第100页| 中文字幕亚洲专区| 国产日韩中文字幕在线| 视频在线观看一区二区| 欧美国产中文字幕| 91网站免费观看| 国产日韩精品视频| 亚洲精品国产综合久久| 欧美午夜精品在线| 日韩在线播放一区| 国产精品久久婷婷六月丁香| 国产精品狼人色视频一区| 中文字幕日韩在线视频| 欧美专区日韩视频| 激情懂色av一区av二区av| 欧美在线视频网站| 九九热精品视频| 羞羞色国产精品| 国内精品模特av私拍在线观看| 欧美理论电影在线观看| 国产ts人妖一区二区三区| 国产精品久久久久高潮| 国产精品6699| 日韩美女免费观看| 最新的欧美黄色| 亚洲人成电影网| 日韩一区二区在线视频| 久久视频在线免费观看| 亚洲一区二区三区成人在线视频精品| 国产区精品在线观看| 日韩欧美成人网| 欧美国产乱视频| 高潮白浆女日韩av免费看| 欧美极品少妇xxxxⅹ裸体艺术| 欧美视频一区二区三区…| 一本久久综合亚洲鲁鲁| 国内精品久久久久久中文字幕| 国产日韩中文字幕在线| 91中文精品字幕在线视频| 美女国内精品自产拍在线播放| 日韩电视剧在线观看免费网站| 欧美在线视频在线播放完整版免费观看| 亚洲女人天堂成人av在线| 国产成人高清激情视频在线观看| 欧美激情精品久久久久久大尺度| 色综久久综合桃花网| 亚洲国产另类 国产精品国产免费| 久久成人18免费网站| 97久久国产精品| 亚洲精品美女久久久久| 欧美极品少妇xxxxⅹ裸体艺术| 在线视频日韩精品| 色悠久久久久综合先锋影音下载| 日韩一区二区在线视频| 亚洲精品天天看| 色综合天天综合网国产成人网| 成人日韩av在线| 91精品国产自产91精品| 欧洲中文字幕国产精品| 国产精品美腿一区在线看| 色噜噜久久综合伊人一本| 亚洲黄色av女优在线观看| 亚洲欧美日韩成人| 18久久久久久| 91亚洲一区精品| 国产精品国语对白| 日韩高清电影免费观看完整版| 亚洲精品视频二区| 欧美激情一区二区三区高清视频| 亚洲国产91精品在线观看| 92福利视频午夜1000合集在线观看| 国产又爽又黄的激情精品视频| 亚洲精品免费在线视频| 日韩中文字幕不卡视频| 久久精品99久久香蕉国产色戒| 国产精品狼人色视频一区| 91嫩草在线视频| 欧美影院成年免费版| 亚洲第一在线视频| 色偷偷av一区二区三区| 欧美成人h版在线观看| 欧美日韩国产限制| 亚洲电影免费观看高清完整版在线观看| 中文字幕欧美精品日韩中文字幕| 伊人久久五月天| 欧美寡妇偷汉性猛交| 日韩av电影中文字幕| 成人激情综合网| 欧洲亚洲在线视频| 欧美成人精品在线视频| 国产精品三级久久久久久电影| 久久久久久久久亚洲| 亚洲综合在线中文字幕|