给出正整数的N X N矩阵Matrix [N] [N]。单元格Matrix [r] [c]只有三步。
矩阵[r + 1] [c]
矩阵[r + 1] [c-1]
矩阵[r + 1] [c + 1]
从第0行的任何列开始,返回直到N-1行的所有路径的最大和。
我的代码对于单个测试用例运行良好,但是对于多个测试用例却给出了错误的答案。 在代码的主要功能中,我传递了一个二维数组和数组中的元素个数作为参数
int findSum(int a[][100],int n)
{
int i,j;
for(i=1;i<n;i++)
{
for(j=0;j<n;j++)
{
int x=a[i][j];
if(j==0)
{
a[i][j]=max(a[i-1][j],a[i-1][j+1])+x;
}
if(j==n-1)
{
a[i][j]=max(a[i-1][j],a[i-1][j-1])+x;
}
else
{
a[i][j]=max(a[i-1][j],max(a[i-1][j-1],a[i-1][j+1]))+x;
}
}
}
int maxm=a[n-1][0];
for(j=0;j<n;j++)
{
if(a[n-1][j]>maxm)
maxm=a[n-1][j];
}
return maxm;
}
将数组作为用户的输入
while(t--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
}
int num=findSum(a,n);
printf("%d\n",num);
}
对于输入: 2 3 5 6 7 7 6 5 7 6 5 3 7 3 2 4 1 5 6 8 9 您的输出是: 20 32 第二种情况的预期输出应为19
答案 0 :(得分:1)
使用if-else-if,而不是多个if语句。
if(j==0)
{
a[i][j] += max(a[i-1][j],a[i-1][j+1]);
}
else if(j==n-1)
{
a[i][j] += max(a[i-1][j],a[i-1][j-1]);
}
else
{
a[i][j] += max(a[i-1][j],max(a[i-1][j-1],a[i-1][j+1]));
}