1261:【例9.5】城市交通路网
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 const int N=105; 5 int main(){ 6 int n,t=1,a[N][N],c[N],f[N]; 7 cin>>n; 8 for(int i=1;i<=n;i++) 9 for(int j=1;j<=n;j++) 10 cin>>a[i][j]; 11 for(int i=1;i<n;i++)f[i]=N*N*N; 12 f[n]=0,c[n]=0; 13 for(int i=n-1;i>0;i--){ 14 for(int j=i+1;j<=n;j++) 15 if(a[i][j]&&f[i]>a[i][j]+f[j]){ 16 f[i]=a[i][j]+f[j]; 17 c[i]=j; 18 } 19 } 20 printf("minlong=%d\n%d",f[1],1); 21 while(c[t]){ 22 printf(" %d",c[t]); 23 t=c[t]; 24 } 25 return 0; 26 }
说句实话,除了1之外的其他f[x]其实是不可靠的!
当然,题目好像有隐含条件,只能从小城市到大城市。
加上这个隐含条件,那么其他f[x]才是有效的。