题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874
题目大意:就是最简单的最短路,唯一需要注意的一点就是到达一个城市的路可能有多条,你要选取最短的那条。
代码:
#include<bits/stdc++.h> using namespace std; #define inf 0x3f3f3f3f #define maxn 205 int mp[maxn][maxn],vis[maxn],n,m,dis[maxn]; void djk(int st){ int i,j,k; for(i=0;i<n;i++){ if(i==st) dis[i]=0; else dis[i]=mp[st][i]; } for(i=0;i<n-1;i++){ int mi=inf,u; for(j=0;j<n;j++){ if(dis[j]<mi&&!vis[j]){ mi=dis[j]; u=j; } } vis[u]=1; for(k=0;k<n;k++){ if(mp[u][k]!=inf) if(dis[k]>dis[u]+mp[u][k]){ dis[k]=dis[u]+mp[u][k]; } } } } int main() { int i,j,k; while(cin>>n>>m){ memset(mp,inf,sizeof(mp)); memset(vis,0,sizeof(vis)); for(i=0;i<m;i++){ int x,y,z; cin>>x>>y>>z; if(mp[x][y]>z){//选取最短的通路 mp[x][y]=z; mp[y][x]=z; } } int start,end; cin>>start>>end; djk(start); if(dis[end]==inf) cout<<-1<<endl; else cout<<dis[end]<<endl; } }