POJ - 2387 Til the Cows Come Home(Dijkstra)
题目链接:http://poj.org/problem?id=2387
#include <iostream> #include <string.h> #define MAX 0x3f3f3f3f #define N 2005 using namespace std; /**************************************************************************************************************** 题意:dijkstra 思路: 1,读清题意,m 和 n 是相反的 2,从 n 到 1 的最短路可以转化为从 1 到 n ****************************************************************************************************************/ int Map[N][N]; int dist[N],visit[N]; int dijkstra(int n) { memset(dist,MAX,sizeof(dist)); memset(visit,0,sizeof(visit)); for(int i = 1;i <= n;i ++) dist[i]=Map[1][i]; dist[1]=0; visit[1]=1; for(int i = 1;i <= n;i ++){ int id,ans=MAX; for(int j = 1;j <= n;j ++){ if(!visit[j] && dist[j] < ans){ ans=dist[j]; id=j; } } visit[id]=1; for(int j = 1;j <= n;j ++) if(!visit[j] && dist[id]+Map[id][j] < dist[j]) dist[j]=dist[id]+Map[id][j]; } } int main() { int n,ed; while(cin>>n>>ed) { memset(Map,MAX,sizeof(Map)); int a,b,c; for(int i = 1;i <= n;i ++){ cin>>a>>b>>c; if(c < Map[a][b]) Map[a][b]=Map[b][a]=c; } dijkstra(ed); cout<<dist[ed]<<endl; } return 0; }