POJ-2387 Til the Cows Come Home

来源:互联网 发布:中国警察智识数据库 编辑:程序博客网 时间:2024/04/28 13:41

//这道题诗裸的dij,但是坑点就是要考虑重边问题,值得纪念//

AC代码:

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;#define N 1005const int inf=1<<29;int vis[N],w[N][N],d[N];int t,n;void dij(){    int i,j;    for(i=1;i<=n;i++)    {        d[i]=w[1][i];    }    d[1]=0;    vis[1]=1;    for(i=1;i<=n;i++)    {        int now=inf,x;        for(j=1;j<=n;j++)        {            if(!vis[j]&&d[j]<now)//每个点进行松弛操作            {                now=d[j];                x=j;            }            else if(!vis[j]&&d[j]==now)//考虑重边问题            {                now=d[j];                x=j;            }        }        vis[x]=1;        for(j=1;j<=n;j++)        {            if(!vis[j]&&d[j]>d[x]+w[x][j])//记录每个点的最短路            {                d[j]=d[x]+w[x][j];            }            else if(!vis[j]&&d[j]==d[x]+w[x][j])            {                d[j]=d[x]+w[x][j];            }        }    }}int main(){    while(scanf("%d%d",&t,&n)!=EOF)    {        int i,j;        memset(vis,0,sizeof(vis));        for(i=1;i<n;i++)        {            for(j=1;j<=n;j++)            {                if(i==j)                {                    w[i][j]=0;//当i==j时,他们的距离为0                }                else                {                    w[i][j]=w[j][i]=inf;//初始化w[i][j]为最大值                }            }        }        int u,v,c;        while(t--)        {            scanf("%d%d%d",&u,&v,&c);            if(c<w[u][v])            {                w[u][v]=w[v][u]=c;            }            else if(c==w[u][v])            {                w[u][v]=w[v][u]=c;            }        }        dij();        printf("%d\n",d[n]);//直接输出d[n]就可以表示1到n的最短距离    }    return 0;}


0 0
原创粉丝点击