#include<stdio.h> #include<string.h> #define MAX 9999999 #define N 205 int map[N][N]; int vis[N]; int d[N]; int start,end,n,m;//n个村庄,m条路径 void init(){ memset(map,MAX,sizeof(map)); memset(vis,0,sizeof(vis)); memset(d,MAX,sizeof(d)); } void dijkstra(int s,int e){ int i,k,j,min; vis[s]=1; for(i=0;i<n;i++) d[i]=map[s][i]; d[s]=0;//注意 for(i=0;i<n;i++){ min=MAX; for(j=0;j<n;j++){ if(vis[j]==0&&d[j]<min){ k=j; min=d[j]; } } vis[k]=1; for(j=0;j<n;j++){ if(vis[j]==0&&d[j]>(map[k][j]+d[k])&&map[k][j]<MAX)// d[j]=map[k][j]+d[k]; } } return ; } int main(){ int tp1,tp2,dis; while(scanf("%d%d",&n,&m)!=EOF){ init(); for(int i=0;i<m;i++){ scanf("%d%d%d",&tp1,&tp2,&dis); if(map[tp1][tp2]>dis) map[tp1][tp2]=map[tp2][tp1]=dis; } scanf("%d%d",&start,&end); dijkstra(start,end); if(d[end]<MAX) printf("%d\n",d[end]); else printf("-1\n"); } return 0; }
简单的dijkstra!
oh yeah!虽然WA了好几次。。。