类似于数塔问题
在一个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];
}
}