pku 2387

题目链接:http://acm.pku.edu.cn/JudgeOnline/problem?id=2387

很明显的最短路径题。。。

#include<iostream> #include<string.h> using namespace std; const int MAX=1001; const int MAXINT=99999999; int map[MAX][MAX]; int visit[MAX]; int dist[MAX]; int T,N; void Dijkstra() { int k,min=MAXINT; for(int i=1;i<=N;i++) { dist[i]=map[N][i]; visit[i]=0; } for(int i=1;i<=N;i++) { min=MAXINT; for(int j=1;j<=N;j++) if(!visit[j]) if(dist[j]<min) { k=j; min=dist[j]; } visit[k]=1; for(int j=1;j<=N;j++) if(!visit[j]&&map[k][j]+dist[k]<dist[j]) dist[j]=map[k][j]+dist[k]; } } int main() { while(cin>>T>>N) { for(int i=0;i<=N+2;i++) { for(int j=0;j<=N+2;j++) map[i][j]=MAXINT; map[i][i]=0; } int x,y,cost; for(int i=0;i<T;i++) { cin>>x>>y>>cost; if(cost<map[x][y]) { map[y][x]=cost; map[x][y]=cost; } } Dijkstra(); cout<<dist[N]<<endl; } return 0; }

你可能感兴趣的:(pku 2387)