#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) 回帖