hdu 1874 Dijkstra算法模板
生活随笔
收集整理的這篇文章主要介紹了
hdu 1874 Dijkstra算法模板
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
單源最短路徑 迪杰斯特拉算法
1.初始化地圖,map[i][j]記錄城鎮 i,j之間最短的道路長度,
若無道路連通 ,則為極大值
2.從起始城鎮開始,用廣度優先搜索思想,嵌入松弛處理算法,
用dis[i]記錄起始城鎮到城鎮 i 的最短路徑長度;
1.初始化地圖,map[i][j]記錄城鎮 i,j之間最短的道路長度,
若無道路連通 ,則為極大值
2.從起始城鎮開始,用廣度優先搜索思想,嵌入松弛處理算法,
用dis[i]記錄起始城鎮到城鎮 i 的最短路徑長度;
3.答案位于dis[t],即終點t城鎮到起始城鎮的最小距離
#include<stdio.h> #include<queue> #define inf 10000000 using namespace std; int main(){int n,m;int map[200][200];//map[i][j]記錄城鎮 i 到 j 間最短連通道路長度int s,t;//記錄起始村莊和終點村莊的編號int dis[200];//記錄 i 號村莊到起始村莊的最短路徑長度int x,y,d;int i,j;while(scanf("%d%d",&n,&m)!=EOF){for(i=0;i<n;i++)for(j=0;j<n;j++)map[i][j]=inf;//所有路徑初始化為最大值while(m--){scanf("%d%d%d",&x,&y,&d);if(map[x][y]>d)map[x][y]=d,map[y][x]=d;} scanf("%d%d",&s,&t);queue<int> q;q.push(s);//起點入隊for(i=0;i<n;i++) dis[i]=inf;//所有城鎮到起始位置的距離初始化為最大值dis[s]=0;//起始城鎮到其自身的距離為0//所有與起始城鎮連接都遍歷完了,結束遍歷 while(!q.empty()) {x=q.front();q.pop();for(i=0;i<n;i++){if(map[x][i]!=inf){//從城鎮 x 到城鎮 i 的路徑(到起始城鎮)較短 if(dis[i]>dis[x]+map[x][i]){dis[i]=dis[x]+map[x][i];//跟新 i 城鎮到起始城鎮的最短距離q.push(i); }}} }if(dis[t]==inf)printf("-1\n");elseprintf("%d\n",dis[t]);} return 0; }總結
以上是生活随笔為你收集整理的hdu 1874 Dijkstra算法模板的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdu 1421 动态规划
- 下一篇: HDU 1874 SPFA算法Dijks