Dijkstra例题:POJ 2387(Til the Cows Come Home)

题目链接

题意:有N个点,给出从a点到b点的距离,当然a和b是互相可以抵达的,问从1到n的最短距离。

这道题与模板类似。从(0,0)到(n-1,n-1);    模板链接:点击打开链接

AC代码:

#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include<algorithm>
#include<cstring>
#include<queue>
#define MAX 0x3f3f3f3f
using namespace std;
int a,b,n,m,l;
int z[2200][2200],c;
int v[2200],biao[2200];
void Dijkstra()
{
    for(int i=1;i<=b;i++)
    {
        biao[1]=0;
        v[i]=z[1][i];
    }
    biao[1]=1;
    for(int i=1;i<=b;i++)
    {
        int t=MAX;
        for(int j=1;j<=b;j++)
        {
            if(!biao[j]&&v[j]<t)
            {
               t=v[j];
                c=j;
            }
        }
        biao[c]=1;
        for(int i=1;i<=b;i++)
        {
            if(!biao[i])
            {
                v[i]=min(v[i],v[c]+z[c][i]);
            }


        }
    }
}
int main()
{
    while(~scanf("%d %d",&a,&b))
    {
        memset(biao,0,sizeof(biao));
         for(int i=1;i<=b;i++)
         {
              for(int j=1;j<=b;j++)
              {
                  z[i][j]=z[j][i]=MAX;
                  if(i==j)  z[i][j]=z[j][i]=0;
              }
         }
        for(int i=1;i<=a;i++)
        {
            scanf("%d %d %d",&l,&m,&n);
            if(z[l][m]>n)
            {
                z[l][m]=z[m][l]=n;
            }
        }
        Dijkstra();
        printf("%d\n",v[b]);
    }
}

猜你喜欢

转载自blog.csdn.net/soul778888/article/details/80316057
今日推荐