竞赛讨论区 > 为什么这个过不了?
头像
LabmemNo012LzTopic
发布于 02-26 16:50
+ 关注

为什么这个过不了?

#include<stdio.h>
#include<string.h>
int a[101][101], n, m, ans = 0, f[1001] = {0}, s[101][101], u = 0;

void js(void)
{
        for (int k = 1; k <= n; k++)
        {
            for (int l = 1; l <= n; l++)
            {
                //该方格未被计数过
                // 内有芝麻
                //邻边有被计数过的方格
                if (s[k][l]==0&&
                    a[k][l] > 0&&
                    s[k + 1][l] + s[k - 1][l] + s[k][l + 1] + s[k][l - 1] > 0)
                {
                    ans += a[k][l];
                    s[k][l] = 1;
                }
            }
        }

        //f为0代表该方格区域内的芝麻总数不等于m,1为等于
        if (ans == m)f[u] = 1;
        //为下一个区域或下一次数据计数归零
        ans = 0;
}

int main()
{
    while (1)
    {
        scanf("%d %d", &n, &m);//输入n,m
        if (n == 0 && m == 0)break;//结束条件

        u++;

        //a,s数组归零
        memset(a, 0, sizeof(a));
        memset(s, 0, sizeof(s));

        //输入每个方格内的芝麻数量
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= n; j++)
            {
                scanf("%d", &a[i][j]);
            }
        }

        //数组s为1代表这个方格已被计数过,0为未计数过
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= n; j++)
            {
                //方格内有芝麻且没有被计数过
                if (a[i][j] > 0 && s[i][j] == 0)
                {
                    ans += a[i][j];//该方格区域内的芝麻总数
                    s[i][j] = 1;
                    js();
                    if (f[u] == 1)break;
                }
            }
            if (f[u] == 1)break;
        }
    }

    if (f[1] == 1)printf("YES");
    else printf("NO");
    for (int i = 2; i <= u; i++)
    {
        if (f[u] == 1)printf("\nYES");
        else printf("\nNO");
    }
    return 0;
}

全部评论

(0) 回帖
加载中...
话题 回帖

本文相关内容

等你来战

查看全部

热门推荐