poj 2387

我又在这种裸题上花了一上午的宝贵时间,唉,这回错在忽略了重边的情况、

#include"stdio.h"

#include"string.h"

#define Maxn 0x7fffffff



int map[1005][1005];

int dis[1005];

void fresh(int n)

{

    int i,j;

    for(i=0;i<=n;i++)

    {

        for(j=0;j<=n;j++)

            map[i][j]=Maxn;

        map[i][i]=0;

    }

    for(i=0;i<=n;i++)

        dis[i]=Maxn;

}



void Dijkstra(int n)

{

    int now=n,i,j,min,vis[1005];

    dis[now]=0;

    memset(vis,0,sizeof(vis));

    vis[now]=1;

    for(i=0;i<n;i++)

    {

        for(j=1;j<=n;j++)

        {

            if(map[now][j]!=Maxn&&dis[now]+map[now][j]<dis[j])

                dis[j]=dis[now]+map[now][j];

        }

        min=Maxn;

        for(j=1;j<=n;j++)

            if(min>dis[j]&&!vis[j])

                min=dis[now=j];

        vis[now]=1;

        

    }

}



int main( )

{

    int t,n,x,y;

    int i,j,leth;

    scanf("%d%d",&t,&n);

    fresh(n);

    for(i=1;i<=t;i++)

    {

        scanf("%d%d%d",&x,&y,&leth);

        if(leth<map[x][y])

            map[x][y]=map[y][x]=leth;

    }

    Dijkstra(n);

    printf("%d\n",dis[1]);

    return 0;

}

你可能感兴趣的:(poj)