Tom's Meadow
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
- Not all squares are covered with grass.
- 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?
汤姆在他的花园里有一片草地。 他将它分成N * M个正方形。 最初所有的广场都被草覆盖着。 他在一些广场上修剪草地,并认为草地是美丽的,当且仅当
并非所有的广场都被草覆盖。
没有两个割草方格相邻。
如果两个方格共享一个边,则它们相邻。 问题来了:汤姆的草地现在变得漂亮了吗?
InputThe 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
输入包含多个测试用例!
每个测试用例都以包含由空格分隔的两个整数N,M(1 <= N,M <= 10)的行开始。 接下来是汤姆草地的描述。 每个N行由M个整数组成,每个行由一个空格分隔。 0(零)表示草地的相应位置被割草,1(1)表示广场被草地覆盖。
N = 0和M = 0的行表示输入的结束,不应该进行处理
OutputOne line for each test case.
Output "Yes" (without quotations) if the meadow is beautiful, otherwise "No"(without quotations).
每个测试用例一行。
如果草地很漂亮,输出“是”(不含引号),否则输出“否”(不含引号)。
Sample Input2 2
1 0
0 1
2 2
1 1
0 0
2 3
1 1 1
1 1 1
0 0
Yes
No
No
题解:给出一n*m只含有0 or 1的图。是否满足两个条件:1.不含有相邻的0; 2.存在0
原创代码:
#include<cstdio>
#include<cstring>
int a[150][150];
int main()
{
int m,n;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==0||m==0)
break;
int ans=0;
memset(a,2,sizeof(a));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf("%d",&a[i][j]);
if(a[i][j]==0)
ans=1;
}
}
int aa=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]==0)
{
if(a[i+1][j]==0||a[i][j+1]==0)
{
aa=1;
break;
}
}
}
if(aa==1)
break;
}
if(ans==1&&aa==0)
{
printf("Yes\n");
}
else
printf("No\n");
}
return 0;
}
借鉴代码:
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m),n,m)
{
int ans[150][150];
memset(ans,0,sizeof(ans));
int q = 0,p = 0;
for(int i = 0;i < n;i++)
{
for(int j = 0;j < m;j++)
{
int t;
scanf("%d",&t);
ans[i][j] = t;
if(t == 0) p = 1;
if(t == 0&&ans[i][j-1] == 0&&j>0)
{
q = 1;
}
}
}
for(int j = 0;j < m;j++)
{
for(int i = 1;i < n;i++)
{
if(ans[i][j] == 0&&ans[i-1][j] == 0)
{
q = 1;
}
}
}
if(q == 0&&p) printf("Yes\n");
else printf("No\n");
}
return 0;
}