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;
}
posted @ 2012-07-27 11:21  朝圣の路  阅读(550)  评论(1编辑  收藏  举报