您的位置:首页 > 其它

数塔问题

2016-04-23 20:22 489 查看
先贴出运行结果:



C++代码:

#include <iostream>
#define N 50
using namespace std;
//a[.][.][0]存储原始数据
//a[.][.][1]存储存储动态规划过程
//a[.][.][2]存储最优化路径
int main()
{
int a

[3];
cout<<"please input the number of rows:";
int rnum;
cin>>rnum;
if (rnum<1)
{
cout<<"输入有误"<<endl;
exit(1);
}
//初始化
for (int i=0;i<rnum;++i)
{
cout<<"please input the "<<i+1<<" row."<<endl;
for (int j=0;j<=i;++j)
{
cin >> a[i][j][0];
a[i][j][1] = a[i][j][0];
a[i][j][2] = 0;
}
}

for (int i=rnum-2;i>=0;--i)
{
for (int j=0;j<=i;++j)
{
if (a[i+1][j][1] > a[i+1][j+1][1])
{
a[i][j][1] += a[i+1][j][1]; //加上左边的数
a[i][j][2] = 0;  //左边的数大,向左走
}
else
{
a[i][j][1] += a[i+1][j+1][1]; //加上右边的数
a[i][j][2] = 1;  //右边的数大,向右走
}
}
}
cout<< "a[i][j][0]存储原始数据如下:"<<endl;
for (int i=0;i<rnum;++i)
{
for (int j=0;j<=i;++j)
{
cout<< a[i][j][0]<<' ';
}
cout<<endl;
}
cout<< "a[i][j][1]存储动态规划过程如下:"<<endl;
for (int i=0;i<rnum;++i)
{
for (int j=0;j<=i;++j)
{
cout<< a[i][j][1]<<' ';
}
cout<<endl;
}
cout<< "a[i][j][2]存储最优解路径如下:"<<endl;
for (int i=0;i<rnum;++i)
{
for (int j=0;j<=i;++j)
{
cout<< a[i][j][2]<<' ';
}
cout<<endl;
}
cout<<"max = "<<a[0][0][1]<<endl;
int col = 0;
cout<<"路径:"<<endl;
for (int i=0;i<rnum-1;++i)
{
cout<<a[i][col][0]<<"->";
col += a[i][col][2];
}
cout<<a[rnum-1][col][0]<<endl;
return 0;
}

// 9
// 12 15
// 10 6 8
// 2 18 9 5
// 19 7 10 4 16
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: