题意:
求出一个起点到其它点的最短距离。
思路:
这题用dijkstra会快一些,所以这里我写的是dijkstra的。
代码:
#include<cstdio>
#include<cstring>
int f[101][101],n,m,c[101],mi,k;
bool b[101];
int main()
{
scanf("%d%d",&n,&m);
for (int i=0;i<n;i++)
for (int j=0;j<n;j++)
{
scanf("%d",&f[i][j]);
if (f[i][j]==-1) f[i][j]=21000000;
f[j][i]=f[i][j];
}
for (int i=0;i<n;i++)
c[i]=f[m][i];//c[i]代表从起点到i的最短距离
memset(b,false,sizeof(b));
b[m]=1;c[m]=0;
for (int i=0;i<n-1;i++)
{
mi=2100000000;
k=-1;
for (int j=0;j<n;j++)
if (!b[j]&&c[j]<mi)
{
mi=c[j];
k=j;
}
if (k==-1) break;
b[k]=true;//封路
for (int j=0;j<n;j++)
if (c[k]+f[k][j]<c[j])
c[j]=c[k]+f[k][j];//更新最短距离
}
for (int i=0;i<n;i++)
printf("%d ",c[i]);
}