C语言 知道我需要什么吗解决有限条件下的“可能情况路径的寻找”

pnwntuvh  于 2023-08-03  发布在  其他
关注(0)|答案(1)|浏览(113)

这个问题是一个计算找到路径的方法的数量的问题。这提供了所有路径数组和N(y),M(x)(数组大小)
所以我在下面写了一段代码
总之,如果一个数组为1,则将较低的3个数组的值的总和相加、存储和上传。

010   020
101-->101

字符串
我所有的尝试都失败了,但由于我在这段代码上没有取得任何进展超过两天,所以我在这里发布了一个问题...我在这个问题中遗漏了什么?
完整的代码如下。
https://github.com/shirohebiui/BAEKJOON/blob/main/24392eng.c

ex)
input\>
5 5
1 0 1 0 1
0 0 1 1 1
1 0 1 0 0
0 1 1 0 1
1 0 1 0 1
output\>
9
//x width = 1
        if(m==1)
        {
            for(int i=0;i<n;i++)
            {
                sum+=arr[i][0];
            }
            if(sum == n)
                sum = 1;
            else
                sum = 0;
            printf("%lld\n", sum);
            return 0;
        }
    
        //y length = 1
        if(n==1)
        {
            for(int j=0;j<m;j++)
            {
                sum+=arr[0][j];
            }
            printf("%lld\n", sum);
            return 0;
        }
    
        //x, y >=2 case
        for(int i=n-2;i>=0;i--)
            for(int j=0;j<m;j++)
            {
                if(arr[i][j]==1)
                {
                if(j==0)        //left end
                    arr[i][j] = arr[i+1][j]+arr[i+1][j+1];
                else if(j==m)   //right end
                    arr[i][j] = arr[i+1][j-1]+arr[i+1][j];
                else            //middle
                    arr[i][j] = arr[i+1][j-1]+arr[i+1][j]+arr[i+1][j+1];
                }
            }
}

的数据

yqlxgs2m

yqlxgs2m1#

我修改了你的一些代码,特别是for循环和if,修改了花括号。这是预期的输出吗?


的数据
代码如下:

#include <stdio.h>
#include <stdlib.h>
long long arr[1000][1000]={0};
int main()
{
    //data input
    int n,m;
    scanf("%d %d", &n, &m);

    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            scanf("%lld", &arr[i][j]);
        }
    }

    long long sum=0;

    //x width = 1
    if(m==1)
    {
        for(int i=0;i<n;i++)
        {
            sum+=arr[i][0];
        }
        if(sum == n){
            sum = 1;
        }else{
            sum = 0;
        }
        printf("%lld\n", sum);
        return 0;
    }

    //y length = 1
    if(n==1)
    {
        for(int j=0;j<m;j++)
        {
            sum+=arr[0][j];
        }
        printf("%lld\n", sum);
        return 0;
    }

    //x, y >=2 case
    for(int i=n-2;i>=0;i--){
        for(int j=0;j<m;j++)
        {
            if(arr[i][j]==1)
            {
            if(j==0){        //left end
                arr[i][j] = arr[i+1][j]+arr[i+1][j+1];
            }else if(j==m){   //right end
                arr[i][j] = arr[i+1][j-1]+arr[i+1][j];
            }else            //middle
                arr[i][j] = arr[i+1][j-1]+arr[i+1][j]+arr[i+1][j+1];
            }
            }
        }
    }
    //test code
    printf("=============\n");
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            printf("%ld ", arr[i][j]);
        }
        printf("\n");
    }

    for(int j=0;j<m;j++){
        sum+=arr[0][j]%1000000007; //This value is the condition specified in the problem
    }
    printf("%lld\n", sum);

    return 0;
}

字符串
请注意,即使是一行if语句和循环也使用花括号通常更好,因为它增加了可读性。

相关问题