hdu2544-------dijkstra模板题

昨晚掌握了dijkstra算法,就在hdu找了一道模板题来刷。题很简单,完全就是数据结构上的算法模板敲的。写完一交,WA! 无语,还以为第一次敲这个算法,没理解呢!又上网上找别人能过的算法敲了一个,一交,又WA! ,表示很无奈啊!一直交了5,错了5次,快疯了。到最后发现,题目描述骗人,他说c《=1000.事实上c超大。最后设置 inf=100000000,才AC! 唉,这算什么啊

算法很简单,dijkstra模板

AC:

#include<stdio.h>
#include<string.h>
#define inf 100000000
int map[105][105];
int d[105];
int s[105];
int n,m;

int dij(int v)
{
    int i,j,k;
    int min,pos;
    for(i=1;i<=n;i++)            //   初始化
    {
        s[i]=0;
        d[i]=map[v][i];
    }
    s[v]=1;
    d[v]=0;
    for(i=1;i<n;i++)
    {
        min=inf;
        for(j=1;j<=n;j++)
        {
            if(!s[j]&&min>d[j])
            {
                pos=j;
                min=d[j];
            }
        }
        s[pos]=1;
        for(j=1;j<=n;j++)
        {
            if(!s[j]&&d[j]>(d[pos]+map[pos][j]))
            d[j]=d[pos]+map[pos][j];
        }
    }
    return  d[n];
}
int main()
{
    int i,j,k;
    int a,b,c;
    while(scanf("%d%d",&n,&m)!=EOF&&n!=0&&m!=0)
    {
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=n;j++)
            map[i][j]=inf;
        }
       
        for(i=1;i<=m;i++)
        {
            scanf("%d%d%d",&a,&b,&c);
            map[a][b]=map[b][a]=c;
        }
        k=dij(1);
        printf("%d\n",k);
    }
    return 0;
}

posted on 2012-03-19 19:32  hrbust_09zhangyabin  阅读(307)  评论(0编辑  收藏  举报