类似于数塔问题

222999 2013-12-14 09:55:04
在一个n×m的方格中,m为奇数,放置有n×m个数,方格中间的下方有一人,此人可按照五个方向前进但不能越出方格。(如图)人每走过一个方格必须取此方格中的数。要求找到一条从底到顶(最上面一排)的路径,使其数相加之和为最大。输出和的最大值。



下面是我的代码,求大神指教,哪里出错了
#include <iostream>
using namespace std;

int main()
{
int a[50][50][3],i,j,n,m,t=0,k,b;
cout<<"请输入行列值n,m(m为奇数):";
cin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
cin>>a[i][j][1];
a[i][j][2]=a[i][j][1];
a[i][j][3]=0;
}

for(i=2;i<=n;i++)
{
for(k=1;k<=m;k++)
{
t=a[i-1][i][2];
a[i][k][3]=i;
for(b=-2;b<=2;b++)
{
if(j+b>0&&j+b<=m&&t<a[i-1][j+b][2])
{
t=a[i-1][j+b][2];
a[i][k][3]=b;
}
}
a[i][k][2]+=t;
}
}
t=0;
for(i=1;i<=m;i++)
{
t=a[n][m/2][2];
b=m/2;
if(t<a[n][i][2])
{
t=a[n][i][2];
b=i;
}
}

cout<<"最大值为:"<<t<<endl;

cout<<a[n][b][1]<<"->";
j=a[i][b][3];
for(i=n-1;i>=1;i--)
{
cout<<a[i][j][1]<<"->";
j+=a[i][j][3];

}



}
...全文
199 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
排山和倒海 2013-12-17
  • 打赏
  • 举报
回复
弱弱的问一句,图呢?

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧