转载请注明出处:http://blog.csdn.net/a1dark
分析:一道最短路的水题、用dijkstra水过。。。
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define N 250 #define INF 0x7fffffff int mpt[N][N]; int dist[N]; int vis[N]; int m,n; void dijkstra(int x){ memset(vis,0,sizeof(vis)); for(int i=0;i<n;i++) dist[i]=mpt[x][i]; vis[x]=1; dist[x]=0; for(int i=0;i<n-1;i++){ int mink=INF,v; for(int j=0;j<n;j++){ if(vis[j]==0&&dist[j]<mink){ mink=dist[j]; v=j; } } vis[v]=1; for(int j=0;j<n;j++){ if(vis[j]==0&&mpt[v][j]!=INF&&mpt[v][j]+dist[v]<dist[j]) dist[j]=mpt[v][j]+dist[v]; } } } void init(){ for(int i=0;i<N;i++) for(int j=0;j<N;j++) { if(i==j)mpt[i][j]=0; else mpt[i][j]=INF; } } int main(){ while(scanf("%d%d",&n,&m)!=EOF){ init(); int s,e,v; for(int i=1;i<=m;i++){ scanf("%d%d%d",&s,&e,&v); if(v<mpt[s][e]){ mpt[s][e]=v; mpt[e][s]=v; } } int start,end; scanf("%d%d",&start,&end); dijkstra(start); if(dist[end]!=INF) printf("%d ",dist[end]); else printf("-1 "); } return 0; }