zoukankan      html  css  js  c++  java
  • 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;
    }



     

  • 相关阅读:
    Objective C 绘制透明窗口的方法
    在挂载的 NTFS 盘上运行 gdb 会遇到权限问题,导致无法初始化
    使用 Eclipse 打造 操作系统实习 JOS 开发环境
    C# URL 中文编码与解码
    突破教育网的防线,将搜狗浏览器的教育网加速功能全面推向各种浏览器
    linux 截屏工具
    yum install 时 提示某个已安装的库(x86_64)比某个要安装的库(i686) 新导致安装失败
    全方位打造 Eclipse 自定义开发环境
    自动售饮料机的verilog实现
    数字跑表的verilog实现
  • 原文地址:https://www.cnblogs.com/lidaojian/p/2428919.html
Copyright © 2011-2022 走看看