题解 最短路问题 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一类循环变量容易写混。


posted on 2014-07-31 12:12  一锅土豆  阅读(91)  评论(0编辑  收藏  举报