源代码: #include<cstdio> #include<cstring> int m(1),n,k,i[1001],x[1001],y[1001],f[1001]; int main() { scanf("%d%d",&n,&k); for (int a=1;a<=n;a++) for (int b=1;b<=n;b++) { scanf("%d",&i[m]); if (i[m]!=-1) { x[m]=a; y[m]=b; m++; } } //邻接矩阵输入。 memset(f,0x3f,sizeof(f)); f[k]=0; //将起点路径长度更新为0。 for (int a=2;a<=n;a++) for (int b=1;b<=m;b++) if (f[x[b]]+i[b]<f[y[b]]) f[y[b]]=f[x[b]]+i[b]; //对所有边权进行遍历,以更新起点到节点的最短路径。 for (int a=1;a<=n;a++) printf("%d --> %d = %d ",k,a,f[a]); return 0; }