题解 最短路问题 POJ 2387
题意:T组数据:给两个点之间的距离,求1到N的最短距离。
做法:Dijkstra算法。水题。
代码:
#include <iostream> #include <cstring> #include <cstdio> #define INF 0x3fffffff using namespace std; const int MAX=1010; int a[MAX][MAX],dis[MAX],v[MAX]; int n,T,x,y,l; void Dijkstra() { int i,j,k; for(j=1;j<=n;j++) dis[j]=a[1][j]; dis[1]=0;v[1]=1; int minn,u,cnt=0; for(k=1;k<n;k++) { minn=INF; for(i=1;i<=n;i++) if(!v[i]&&minn>dis[i]) minn=dis[i],u=i; cnt+=minn; v[u]=1; for(i=1;i<=n;i++) if(!v[i]&&(dis[i]>a[u][i]+minn)) dis[i]=a[u][i]+minn; } printf("%d\n",dis[n]); } int main() { int i,j; memset(v,0,sizeof(v)); scanf("%d%d",&T,&n); for(i=1;i<=n;i++) for(j=1;j<=n;j++) a[i][j]=INF; while(T--) { scanf("%d%d%d",&x,&y,&l); a[x][y]=min(a[x][y],l); a[y][x]=a[x][y]; } Dijkstra(); return 0; }错误:WA 注意重边,i,j,k一类循环变量容易写混。