http://acm.fafu.edu.cn/problem.php?id=1030
1.题目:
开车从起始点A到目的地B的路线有多条。给你一张描述待选路线的表(n*n的矩阵A),让你找出行车距离最短的路线。表中表示了任意两个路口的连通情况,以及距离。矩阵元素a(i,j)=0表是路口i,j不连通,a(i,j)!=0表示路口i,j的行车距离。其中起始点A在路口1,目的地B在路口n.
2.代码
#include<iostream>
using namespace std;
int main()
{ //ifstream cin("1030.in");
int init=1000,j,i,n,k,t,**w,*s,*p,*d;
cin >> n;
d=new int[n];
s=new int[n];
p=new int[n];
w=new int*[n];
for(i=0;i<n;i++)
{
w[i]=new int[n];
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>w[i][j];
for(s[0]=1,i=1;i<n;i++)
{
s[i]=0;d[i]=w[0][i];
if(d[i]<init) p[i]=0;
else p[i]=-1;
}
for(i=1;i<n;i++)
{
t=init;
k=1;
for(j=1;j<n;j++)
if((!s[j])&&(d[j]<t)){t=d[j];k=j;}
s[k]=1;
for (j=1;j<n;j++)
if((!s[j])&&(d[j]>d[k]+w[k][j])) {
d[j]=d[k]+w[k][j];
p[j]=k;
}
}
cout << d[n-1] << endl;
return 0;
}