当前位置:   article > 正文

1261:城市交通路网_c++城市交通路网

c++城市交通路网

 

【题目描述】

下图表示城市之间的交通路网,线段上的数字表示费用,单向通行由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. //Created on 2020/2/16
  2. #pragma GCC optimize(2)//请勿随便使用
  3. #include<bits/stdc++.h>
  4. using namespace std;
  5. const int idata=100+5;
  6. const int maxn=0x3f3f3f3f;
  7. int dp[idata][idata];
  8. int fee[idata*10];
  9. int show[idata];
  10. int flag;
  11. int main()
  12. {
  13. register int i,j;
  14. int n;
  15. cin>>n;
  16. for(i=1;i<=n;i++)
  17. {
  18. for(j=1;j<=n;j++)
  19. {
  20. cin>>dp[i][j];
  21. }
  22. }
  23. for(i=1;i<n;i++)
  24. fee[i]=maxn;
  25. fee[n]=0;
  26. for(i=n-1;i>=1;i--)
  27. {
  28. for(j=i+1;j<=n;j++)
  29. {
  30. if(dp[i][j]!=0&&fee[j]!=maxn
  31. &&fee[i]>dp[i][j]+fee[j])
  32. {
  33. fee[i]=dp[i][j]+fee[j];
  34. show[i]=j;
  35. }
  36. }
  37. }
  38. cout<<"minlong="<<fee[1]<<endl;
  39. flag=1;
  40. while(flag)
  41. {
  42. cout<<flag<<" ";
  43. flag=show[flag];
  44. }
  45. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/716666
推荐阅读
相关标签
  

闽ICP备14008679号