http://acm.hdu.edu.cn/showproblem.php?pid=2680
都是些入门的套套模版
#include<stdio.h> #include<string.h> #define INF 0xfffffff #define N 1002 int map[N][N],dis[N],vis[N],n,m,min; void dijkstra(int s) { int i,j,k; memset(vis,0,sizeof(vis)); for(i=1;i<=n;i++) dis[i]=map[s][i]; dis[s]=0; vis[s]=1; for(i=1;i<=n;i++) { min=INF; for(j=1;j<=n;j++) if(!vis[j]&&dis[j]<min) { min=dis[j]; k=j; } if(min==INF) break; vis[k]=1; for(j=1;j<=n;j++) if(!vis[j]&&dis[j]>dis[k]+map[k][j]) dis[j]=dis[k]+map[k][j]; } } int main(void) { int i,j,s,p,q,t,w,x,ans; while(scanf("%d%d%d",&n,&m,&s)!=EOF) { for(i=1;i<=n;i++) for(j=1;j<=n;j++) map[i][j]=INF; for(i=0;i<m;i++) { scanf("%d%d%d",&p,&q,&t); if(map[q][p]>t) map[q][p]=t; } dijkstra(s); scanf("%d",&w); ans=INF; for(i=0;i<w;i++) { scanf("%d",&x); if(ans>dis[x]) ans=dis[x]; } if(ans!=INF) printf("%d\n",ans); else printf("-1\n"); } return 0; }