ZOJ 2850 Beautiful Meadow (简单题)

Beautiful Meadow


Time Limit: 2 Seconds Memory Limit: 65536 KB


 

                                                                       

Tom has a meadow in his garden. He divides it into N * M squares. Initially all the squares were covered with grass. He mowed down the grass on some of the squares and thinks the meadow is beautiful if and only if

  1. Not all squares are covered with grass.
  2. No two mowed squares are adjacent.

Two squares are adjacent if they share an edge. Here comes the problem: Is Tom's meadow beautiful now?

Input

The input contains multiple test cases!

Each test case starts with a line containing two integers N, M (1 <= N, M <= 10) separated by a space. There follows the description of Tom's Meadow. There're N lines each consisting of M integers separated by a space. 0(zero) means the corresponding position of the meadow is mowed and 1(one) means the square is covered by grass.

A line with N = 0 and M = 0 signals the end of the input, which should not be processed

Output

One line for each test case.

Output "Yes" (without quotations) if the meadow is beautiful, otherwise "No"(without quotations).

Sample Input

2 2
1 0
0 1
2 2
1 1
0 0
2 3
1 1 1
1 1 1
0 0

Sample Output

Yes
No
No


Author: CAO, Peng
Source: Zhejiang Provincial Programming Contest 2007

解题报告:这是昨天我们学校省赛选拔赛的题(题目是浙江第四次省赛)当时我看的这个题,但是题意看错了,哎!大一的都一次AC,而我交了四次,题意:就是起初全部是草覆盖,经过除草之后看是否是Beautiful Meadow,1、不能全部为草,2、相邻的不能全为空地。

代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAX = 12;
int map[MAX][MAX];
int main()
{
int i, j, n, m, flag1, flag2;
while (scanf("%d%d", &n, &m) != EOF)
{
if (n == 0 || m == 0)
{
break;
}
for (i = 0; i < MAX; ++i)//初始化
{
for (j = 0; j < MAX; ++j)
{
map[i][j] = 1;
}
}
flag1 = 0;//假设全部是草
flag2 = 1;//假设能满足没有两块空地相邻
for (i = 1; i <= n; ++i)
{
for (j = 1; j <= m; ++j)
{
scanf("%d", &map[i][j]);
if (map[i][j] == 0)
{
flag1 = 1;//这样保证了不全部为草
}
}
}
for (i = 1; i <= n && flag2; ++i)
{
for (j = 1; j <= m && flag2; ++j)
{
if ((map[i - 1][j] == 0 || map[i + 1][j] == 0 || map[i][j + 1] == 0 || map[i][j - 1] == 0) && map[i][j] == 0)
{
flag2 = 0;//这样说明有两块空地相邻,不是Beautiful Meadow

}
}
}
if (flag1 && flag2)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
return 0;
}



 

原文地址:https://www.cnblogs.com/lidaojian/p/2428919.html