当前位置:   article > 正文

动态规划解决数塔问题_本关任务:编写用动态规划解决数塔问题。 相关知识 为了完成本关任务,你需要掌握:

本关任务:编写用动态规划解决数塔问题。 相关知识 为了完成本关任务,你需要掌握:

这是完整的程序,可以直接运行。数塔模型在下面,也是测试数据。数塔图片如图所示,所谓的数塔问题就是,从上到下找到一条路径,使得经过的点的值加起来和最大,输出路径












  1. #include <iostream>
  2. using namespace std;
  3. void main(){
  4. int d1[6][6],d2[6][6];
  5. int max,result;
  6. for (int i=1;i<=5;i++)
  7. for (int j=1;j<=i;j++)
  8. {
  9. cin>>d1[i][j];
  10. d2[i][j]=d1[i][j];
  11. }
  12. //构造数组d2
  13. int s=1;
  14. for(int x=5;x>=2;x--)
  15. {
  16. for (int y=1;y<=5-s;y++)
  17. {
  18. if(d2[x][y]>=d2[x][y+1])
  19. max=d2[x][y];
  20. else max=d2[x][y+1];
  21. //cout<<"max="<<max<<endl;
  22. d2[x-1][y]=max+d2[x-1][y];
  23. }
  24. s++;
  25. }
  26. //输出b2中的数据
  27. /*for (int i1=1;i1<=5;i1++)
  28. {
  29. for (int j1=1;j1<=i1;j1++)
  30. {
  31. cout<<d2[i1][j1]<<" ";
  32. }
  33. cout<<endl;
  34. }*/
  35. //m横坐标,n纵坐标
  36. int m=1,n=1;
  37. cout<<"最大值的行走路径为:"<<endl;
  38. //输出第一个路径
  39. cout<<d1[1][1]<<" ";
  40. for(int a=1;a<=5;a++)
  41. {
  42. result=d2[m][n]-d1[m][n];
  43. if (result==d2[m+1][n])
  44. {
  45. m=m+1;//m的值每次都要向后移动一位
  46. cout<<d1[m][n]<<" ";
  47. }
  48. else if(result==d2[m+1][n+1])
  49. {
  50. m=m+1;//m的值每次都要向后移动一位
  51. n=n+1;//n的值向后移动一位
  52. cout<<d1[m][n]<<" ";
  53. }
  54. }
  55. cout<<endl;
  56. }
  57. /*
  58. 测试数据
  59. 9
  60. 12 15
  61. 10 6 8
  62. 2 18 9 5
  63. 19 7 10 4 16
  64. */



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

闽ICP备14008679号