1
已解决
http://judge.codingtang.com/problem/1275/
#include <bits/stdc++.h>
using namespace std;
int d[900][900];
int main()
{
int n,a;
cin>>n>>a;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
string c;
int x;
cin>>c;
stringstream ss;
ss << c;
ss >> x;
ss.clear();
if(x!=0||x==0&&c=="0")
{
d[i][j]=x;
}
else
{
d[i][j]=1000000;
}
}
}
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
for(int k=1; k<=n; k++)
if(i!=j&&i!=k&&j!=k&&d[i][j]>d[i][k]+d[k][j])
{
d[i][j]=d[i][k]+d[k][j];
}
for(int i=1; i<=n; i++)
{
if(i!=a) cout<<"("<<a<<" -> "<<i<<") = "<<d[a][i]<<endl;
}
return 0;
}
1
0
0
0
0
0
关于最短路径我个人比较推崇这3个算法
SPFA(最好用,但难),Dijkstra算法,Floyd算法(3个中,最好写,但时间复杂度高)
这是一个blog,你可以看一看http://blog.csdn.net/qq_35644234/article/details/60870719

