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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

含有负边的图的最短路径(Bellman_ford算法)

發(fā)布時間:2025/6/15 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 含有负边的图的最短路径(Bellman_ford算法) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

更新所有的邊,每條邊更新V-1次,時間復(fù)雜度為O(V*E).

有些更新操作是重復(fù)了的,這里可以考慮檢查多余的重復(fù)操作作,如果沒有更新發(fā)生,則立即終止算法。

#include<iostream> #include<malloc.h> #include<queue> #include <algorithm> #include<stdlib.h> #include<functional> using namespace std; #define maxNum 100 //定義鄰接舉證的最大定點數(shù) #define maxWeight 1000000 //邊權(quán)最大值 //頂點信息 typedef struct { int id; int dist; }node; //圖的鄰接矩陣表示結(jié)構(gòu) typedef struct { //char v[maxNum];//圖的頂點信息 node v[maxNum]; int e[maxNum][maxNum];//圖的頂點信息 int vNum;//頂點個數(shù) int eNum;//邊的個數(shù) }graph; //函數(shù)聲明 void createGraph(graph *g);//創(chuàng)建圖g //Bellman_ford算法 void Bellman_ford(graph *g) { int k,i,j; //初始化dist的值 for(i=1;i<=g->vNum;i++) { g->v[i].dist=maxWeight; //dist為最大值 g->v[i].id=i; } g->v[1].dist=0;//1作為源點,dist為0 for(k=1;k<=g->vNum;k++)//V-1次循環(huán) { for(i=1;i<=g->vNum;i++) { for(j=1;j<=g->vNum;j++) { if(g->e[i][j]!=maxWeight) if(g->v[j].dist>(g->v[i].dist+g->e[i][j])) g->v[j].dist=g->v[i].dist+g->e[i][j]; } } //for(int p=1;p<=g->vNum;p++)//輸出每次更新完以后的dist // cout<<g->v[p].dist<<" "; //cout<<endl; } } void createGraph(graph *g)//創(chuàng)建圖g { cout<<"正在創(chuàng)建無向圖..."<<endl; cout<<"請輸入頂點個數(shù)vNum:"; cin>>g->vNum; int i,j; //構(gòu)造鄰接矩陣,頂點到自身的距離是無窮大的。 cout<<"輸入鄰接矩陣權(quán)值:"<<endl; for(i=1;i<=g->vNum;i++) for(j=1;j<=g->vNum;j++) { cin>>g->e[i][j]; if(g->e[i][j]==0) g->e[i][j]=maxWeight; } } int main() { graph *g; g=(graph*)malloc(sizeof(graph)); createGraph(g); Bellman_ford(g); cout<<"Dijkstra算法單源(源為1)最短路徑為:"<<endl; for(int k=1; k<=g->vNum; k++) { cout<<g->v[k].dist<<" "; } cout<<endl; system("pause"); return 0; } /* 正在創(chuàng)建無向圖... 請輸入頂點個數(shù)vNum:8 輸入鄰接矩陣權(quán)值: 0 10 0 0 0 0 0 8 0 0 0 0 0 2 0 0 0 1 0 1 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 -1 0 0 0 0 -2 0 0 0 0 0 0 -4 0 0 0 -1 0 0 0 0 0 0 0 0 1 0 Dijkstra算法單源(源為1)最短路徑為: 0 5 5 6 9 7 9 8 請按任意鍵繼續(xù). . . */?

?

?

ps:2011-6-15

1.修改:dist單獨列出一個數(shù)組存放,不在將dist值存放在圖中。

2.輸出dist修改過程,發(fā)現(xiàn)后續(xù)的dist沒有發(fā)生變化,可以通過一個檢查函數(shù)來判斷,如果dist前后沒有發(fā)生變化則表明已經(jīng)找到最短路徑

代碼實例:

#include<iostream> #include<malloc.h> #include<queue> #include <algorithm> #include<stdlib.h> #include<functional> using namespace std; #define maxNum 100 //定義鄰接舉證的最大定點數(shù) #define maxWeight 1000000 //邊權(quán)最大值 int dist[maxNum];//定義數(shù)組,默認情況下數(shù)組中的所有元素都為0 //圖的鄰接矩陣表示結(jié)構(gòu) typedef struct { char v[maxNum];//圖的頂點信息 int e[maxNum][maxNum];//圖的頂點信息 int vNum;//頂點個數(shù) int eNum;//邊的個數(shù) }graph; //函數(shù)聲明 void createGraph(graph *g);//創(chuàng)建圖g void Bellman_ford(graph *g); //Bellman_ford算法 void Bellman_ford(graph *g) { int k,i,j,p; //初始化dist的值 for(i=1;i<=g->vNum;i++) { dist[i]=maxWeight; } dist[1]=0; for(i=1;i<=g->vNum;i++) { cout<<dist[i]<<" "; } cout<<endl; cout<<"輸出"<<g->vNum<<"次迭代過程中的dist值"<<endl; for(k=1;k<=g->vNum;k++)//V-1次循環(huán) { //更新每一條邊的權(quán)值 for(i=1;i<=g->vNum;i++) { for(j=1;j<=g->vNum;j++) { if(g->e[i][j]!=maxWeight&&dist[i]!=maxWeight)//如果i->j之間存在路徑 { if(dist[j]>dist[i]+g->e[i][j]) { dist[j]=dist[i]+g->e[i][j]; } } } } for(i=1;i<=g->vNum;i++) { cout<<dist[i]<<" "; } cout<<endl; } } void createGraph(graph *g)//創(chuàng)建圖g { cout<<"正在創(chuàng)建無向圖..."<<endl; cout<<"請輸入頂點個數(shù)vNum:"; cin>>g->vNum; int i,j; //構(gòu)造鄰接矩陣,頂點到自身的距離是無窮大的。 cout<<"輸入鄰接矩陣權(quán)值:"<<endl; for(i=1;i<=g->vNum;i++) for(j=1;j<=g->vNum;j++) { cin>>g->e[i][j]; if(g->e[i][j]==0) g->e[i][j]=maxWeight; } } int main() { graph *g; g=(graph*)malloc(sizeof(graph)); createGraph(g); Bellman_ford(g); cout<<"Dijkstra算法單源(源為1)最短路徑為:"<<endl; for(int k=1; k<=g->vNum; k++) { cout<<dist[k]<<" "; } cout<<endl; system("pause"); return 0; } /* 正在創(chuàng)建無向圖... 請輸入頂點個數(shù)vNum:8 輸入鄰接矩陣權(quán)值: 0 10 0 0 0 0 0 8 0 0 0 0 0 2 0 0 0 1 0 1 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 -1 0 0 0 0 -2 0 0 0 0 0 0 -4 0 0 0 -1 0 0 0 0 0 0 0 0 1 0 0 1000000 1000000 1000000 1000000 1000000 1000000 1000000 輸出8次迭代過程中的dist值 0 10 10 1000000 1000000 12 9 8 0 5 10 11 14 8 9 8 0 5 5 11 14 7 9 8 0 5 5 6 9 7 9 8 0 5 5 6 9 7 9 8 0 5 5 6 9 7 9 8 0 5 5 6 9 7 9 8 0 5 5 6 9 7 9 8 Dijkstra算法單源(源為1)最短路徑為: 0 5 5 6 9 7 9 8 請按任意鍵繼續(xù). . . */?

?

轉(zhuǎn)載于:https://www.cnblogs.com/xwdreamer/archive/2011/06/14/2297002.html

總結(jié)

以上是生活随笔為你收集整理的含有负边的图的最短路径(Bellman_ford算法)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 999视频在线 | 国产伦精品一区二区免费 | 哪里可以免费看毛片 | 中文字幕亚洲国产 | 成年人视屏 | 国产精品一区二区无码免费看片 | 欧美性猛交69 | 白白色免费视频 | 青青免费在线视频 | 成人免费无码大片a毛片 | 国产精品爽爽久久久久久 | www.com在线观看 | 久久久久亚洲av无码专区首jn | 亚洲精品小视频在线观看 | 人妻妺妺窝人体色www聚色窝 | 大桥未久中文字幕 | 国产精品专区在线观看 | 天天操天天爽天天射 | caoporn成人| 久久在线免费观看 | 色婷婷综合久久 | 超碰综合网 | 狠狠干五月天 | 在线视频久久 | 日韩中文字幕视频 | 午夜黄视频 | 人人爽人人爽人人片 | 日韩欧美猛交xxxxx无码 | 红桃视频黄色 | 91色网站 | 99视频国产精品免费观看a | 五月深爱 | 成人免费高清在线观看 | 老司机深夜福利在线观看 | 日韩免费一二三区 | 国产精品久久久久久久久免费桃花 | 欧美久久综合网 | 男女无遮挡做爰猛烈视频 | 三级全黄做爰在线观看 | 国产精品成人在线 | aaa级片 | 日本少妇b | 国产视频123 | 91蝌蚪在线观看 | 日本黄色片视频 | 免费毛片基地 | 精品一区二区亚洲 | 成人午夜激情影院 | 一二三不卡视频 | 国产高清在线 | 亚洲人免费 | 91手机在线观看 | 五月丁香久久婷婷 | 超碰在线91| 天天色天天操天天 | 麻豆影视免费观看 | 亚洲欧美国产精品久久久久久久 | 久久久999国产 | 爱情岛论坛永久入址测速 | 日韩91精品 | 婷婷色在线视频 | 久久人人看 | 无码精品人妻一区二区三区漫画 | 日韩大片免费观看 | 不卡影院av | 国产伦精品免费视频 | 久色福利 | 国产毛片欧美毛片久久久 | 国产超碰人人模人人爽人人添 | 一二三四区视频 | 韩国女主播一区二区 | 成人久久久久 | 亚洲人免费 | 91激情网 | 中文字幕91爱爱 | 韩国三级在线 | 男女视频在线免费观看 | 插我一区二区在线观看 | 欧美黄色a级大片 | 狗爬女子的视频 | 国产黄色大片在线观看 | 国产精品第一页在线观看 | 国产成人精品免费在线观看 | 色中色在线视频 | 久久久久二区 | 玖玖久久| 免费观看全黄做爰的视频 | 男人日女人逼 | 国产极品美女高潮无套在线观看 | 欧美v亚洲 | 懂色中文一区二区在线播放 | 老鸭窝久久 | 国产精自产拍久久久久久蜜 | 成年人激情视频 | 久久成人动漫 | 奶罩不戴乳罩邻居hd播放 | 国产福利一区二区视频 | 色婷婷视频网 | 肥婆大荫蒂欧美另类 |