矩阵中的最长路径

时间:2019-09-22 10:28:24

标签: c arrays

给出正整数的N X N矩阵Matrix [N] [N]。单元格Matrix [r] [c]只有三步。

  1. 矩阵[r + 1] [c]

  2. 矩阵[r + 1] [c-1]

  3. 矩阵[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

1 个答案:

答案 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]));
}