hdoj 2544 最短路
生活随笔
收集整理的這篇文章主要介紹了
hdoj 2544 最短路
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目傳送:http://acm.hdu.edu.cn/showproblem.php?pid=2544
分析:Dijkstra算法
1 //2013-10-30 10:01:25 Accepted 2544 15MS 340K 1824 B C++ 空信高手 2 #include <iostream> 3 using namespace std; 4 5 /*==================================================*\ 6 | Dijkstra 數組實現O (N^2 ) 7 | Dijkstra --- 數組實現( 在此基礎上可直接改為STL 的Queue實現) 8 | lowcost[] --- beg 到其他點的最近距離 9 | path[] -- beg為根展開的樹,記錄父親結點 10 \*==================================================*/ 11 #define INF 0x3F3F3F3F; 12 const int N=110; 13 int path[N],vis[N]; 14 int cost[N][N]; 15 void Dijkstra(int lowcost[N],int n,int beg) 16 { 17 int i,j,min; 18 memset(vis,0,sizeof(vis)); 19 vis[beg]=1; 20 for(i=0; i<n; i++) 21 { 22 lowcost[i]=cost[beg][i]; 23 path[i]=beg; 24 } 25 lowcost[beg]=0; 26 path[beg]=-1; 27 int pre=beg; 28 for(i=1; i<n; i++) 29 { 30 min=INF; 31 for(j=0; j<n; j++) 32 //下面的加法可能導致溢出,INF不能取太大 33 if(vis[j]==0&&lowcost[pre]+cost[pre][j]<lowcost[j]) 34 { 35 lowcost[j]=lowcost[pre]+cost[pre][j]; 36 path[j]=pre; 37 } 38 for(j=0; j<n; j++) 39 if(vis[j]==0&&lowcost[j]<min) 40 { 41 min=lowcost[j]; 42 pre=j; 43 } 44 vis[pre]=1; 45 } 46 } 47 void Init() 48 { 49 int i,j; 50 for(i=0; i<N; i++) 51 for(j=0; j<N; j++) 52 cost[i][j]=INF; 53 } 54 55 int main() 56 { 57 // freopen("input.txt","r",stdin); 58 int n,m,i,a,b,dis; 59 while(cin>>n>>m&&!(n==0&&m==0)) 60 { 61 Init(); 62 int lowcost[N]; 63 for(i=0; i<m; i++) 64 { 65 cin>>a>>b>>dis; 66 if(cost[a-1][b-1]>dis) 67 cost[a-1][b-1]=cost[b-1][a-1]=dis; 68 } 69 Dijkstra(lowcost,n,0); 70 cout<<lowcost[n-1]<<endl; 71 // if( lowcost[n-1] < 0x3F3F3F3F ) cout<<lowcost[n-1]<<endl; 72 // else cout<<"-1"<<endl; 73 } 74 return 1; 75 }?
?
轉載于:https://www.cnblogs.com/panweishadow/p/3396074.html
總結
以上是生活随笔為你收集整理的hdoj 2544 最短路的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CI 模型公用查询函数
- 下一篇: sql 定时同步两个数据库