题意: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一类循环变量容易写混。