题意:有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]);
}
}