#include<stdio.h>
#define inf 10000
int main()
{
int e[100][100],book[10],dis[10];
int n,i,j,u,min,v,a,b;
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&e[i][j]);
for(i=0;i<n;i++)
dis[i]=e[0][i];
for(i=0;i<n;i++)
book[i]=0;
book[0]=1;
for(i=0;i<n;i++)
{
min=inf;
for(j=0;j<n;j++)
{
if(book[j]==0&&dis[j]<min)
{
min=dis[j];
u=j;
}
}
book[u]=1;
for(v=0;v<n;v++)
{
if(e[u][v]<inf)
{
if(dis[v]>e[u][v]+dis[u])
dis[v]=e[u][v]+dis[u];
}
}
}
printf("%d\n",dis[2]);
return 0;
}
迪杰斯特拉算法。一个点到其他任意点的最短距离。此代码段实现的是0到其他点的最短距离。要实现别的点到其他点的最短距离,只需将e[0][i]改为e[a][i],book[0]改为book[a].