城市交通路网

【题目描述】

下图表示城市之间的交通路网,线段上的数字表示费用,单向通行由A->E。试用动态规划的最优化原理求出A->E的最省费用。

如图:求v1到v10的最短路径长度及最短路径。

【输入】

第一行为城市的数量N;

后面是N*N的表示两个城市间费用组成的矩阵。

【输出】

A->E的最省费用。

【输入样例】

10
0  2  5  1  0  0  0  0  0  0
0  0  0  0 12 14  0  0  0  0
0  0  0  0  6 10  4  0  0  0
0  0  0  0 13 12 11  0  0  0
0  0  0  0  0  0  0  3  9  0
0  0  0  0  0  0  0  6  5  0
0  0  0  0  0  0  0  0 10  0
0  0  0  0  0  0  0  0  0  5
0  0  0  0  0  0  0  0  0  2
0  0  0  0  0  0  0  0  0  0

【输出样例】

minlong=19
1 3 5 8 10
 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 using namespace std;
 5 int main(){
 6     long n,i,j,x,f[100],c[100],a[100][100];
 7     memset(a,0,sizeof(a));
 8     memset(c,0,sizeof(c));
 9     cin>>n;
10     for(i=1;i<=n;i++)
11         for(j=1;j<=n;j++) cin>>a[i][j];
12     for(i=1;i<=n;i++) f[i]=1000000;
13     f[n]=0;
14     for(i=n-1;i>=1;i--)
15         for(x=i+1;x<=n;x++)
16             if((a[i][x]>0)&&(f[x]!=1000000)&&(f[i]>a[i][x]+f[x])){
17                 f[i]=a[i][x]+f[x];
18                 c[i]=x;
19             }
20     cout<<"minlong="<<f[1]<<endl;
21     x=1;
22     while(x!=0){
23         cout<<x<<" ";
24         x=c[x];
25     }
26     return 0;
27 }

最近一段时间先练练dp,

主要是背包,

没办法,

我太菜了,

需要时间的磨炼qwq。

好,

一道简单又基础的dp,

我就不多说了,

我这种蒟蒻都会的,

也不指望有谁不会qwq

猜你喜欢

转载自www.cnblogs.com/sxy2004/p/12274409.html