杭电 2544 最短路

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

int inf=0x7fffffff;

int n,m;

int map[110][110],hash[110],dis[110];

void dijstra()

{

     dis[1]=0;

     for(int i=1;i<=n;i++)

     {

          int t=inf,pos;

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

          {

               if(hash[j]==0)

               {

                   if(dis[j]<t)

                   {

                       t=dis[j];

                       pos=j;

                   }

               }

          }

          hash[pos]=1;

          if(pos==n)  break;

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

          {

               if(hash[j]==0)

               {

                    if(map[pos][j]!=inf&&dis[pos]+map[pos][j]<dis[j])//注意要满足map[pos][j]!=inf.

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

               }

          }

     }

}

int main()

{

    int x,y,v;

    while(scanf("%d%d",&n,&m),m||n)

    {

        for(int i=1;i<=n;i++)

        {

            dis[i]=inf;

            hash[i]=0;

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

            {

                map[i][j]=inf;

            }

        }

        for(int i=1;i<=m;i++)

        {

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

            if(x!=y&&map[x][y]>v)

               map[x][y]=map[y][x]=v;//差点忘了写map[x][y]=map[y][x]了。

        }

        dijstra();

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

    }

   // system("pause");

    return 0;

}

编辑器加载中...

你可能感兴趣的:(最短路)