til the cows come home (dij)
题目:
https://vjudge.net/problem/POJ-2387
思路:
输入的两个点之间可能右多个长度,留下最小的
#include<stdio.h> #include<string.h> const int maxn=1003; const int maxm=2003; const int inf=0x3f3f3f3f; int dis[maxn],v[maxn],a[maxn][maxn]; int t,n; void dij() { v[1]=1; for(int i=1;i<=n;i++) { if(i==1) dis[i]=0; else dis[i]=a[1][i]; } for(int i=1;i<n;i++) { int p=1; int mm=inf; for(int j=1;j<=n;j++) { if(!v[j]&&dis[j]<mm) { mm=dis[j]; p=j; } } v[p]=1; for(int j=1;j<=n;j++) { if(!v[j]&&dis[p]+a[p][j]<dis[j]) dis[j]=dis[p]+a[p][j]; } } printf("%d\n",dis[n]); } int main() { memset(a,0x3f,sizeof(a)); scanf("%d %d",&t,&n); int u,v,w; while(t--) { scanf("%d %d %d",&u,&v,&w); if(w<a[u][v]) { a[u][v]=w; a[v][u]=w; } } dij(); }
浙公网安备 33010602011771号