YTUOJ-Beautiful Meadow

Description

 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 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

问题分析:

Tom有一块草坪,分成N*M个区域,有修剪过的草坪和未修剪过的草坪。求TOM的草坪漂不漂亮。

漂亮的条件:

①草坪不能全为未修剪过的草坪。

②相邻草坪不能同为修剪过的草坪。

代码如下:

</pre><pre name="code" class="cpp">#include <iostream>
#define MAX 12                                   //最大12格
using namespace std;
int map[MAX][MAX];
int a[4][2]= {{0,1},{0,-1},{1,0},{-1,0}};
int n,m,sum,mark;
bool Bound(int x,int y)
{
    return (x>=0&&y>=0&&x<n&&y<m);
}

void Decide()
{
    int i,j,ti,tj,k;
    for(i=0; i<n; i++)
        for(j=0; j<m; j++)                   //依次以每一个地区为原点向四周搜索
        {
            if(map[i][j]==1)                 //如果当前地区是未修减过的草坪,未修减草坪数sum++,结束当前循环
            {
                sum++;
                continue;
            }
            for(k=0; k<4; k++)
            {
                ti=i+a[k][0];
                tj=j+a[k][1];
                if(Bound(ti,tj))             //在给定范围内
                {
                    if(map[ti][tj]==0)       //邻边是修减过的草坪
                    {
                        mark=1;
                        return ;
                    }
                }
            }
        }
}

int main()
{
    while(cin>>n>>m)
    {
        if(n==0&&m==0)
            break;
        int i,j;
        for(i=0; i<n; i++)
            for(j=0; j<m; j++)
                cin>>map[i][j];
        mark=0;
        sum=0;
        Decide();
        if(mark==1||sum==m*n)                 //如果不满足条件1和条件2,输出No
            cout<<"No"<<endl;
        else
            cout<<"Yes"<<endl;
    }
    return 0;
}

运行结果:

学习心得:

这是我碰到的比较简单的搜索问题了,之前那些走迷宫的真心晕,,虽然借鉴了下别人的分析,但好在自己成功做了出来。

时间: 2024-10-23 03:41:40

YTUOJ-Beautiful Meadow的相关文章

ZOJ 2850: Beautiful Meadow

ZOJ - 2850 ///@author Sycamore, ZJNU ///@accepted_on 2017-01-19 #include<iostream> using namespace std; bool bl[10][10]; int main() { short M, N; while (cin >> M >> N&&M&&N) { bool b1=true,b2 = false; for (int i = 0; i<

[ZOJ3213] Beautiful Meadow

插头DP...网格图,有障碍,格子上有权值,求总权值最大的简单路径. 因为路径的起始点不确定..所以多开一维表示当前已经有多少个独立插头.. 只要不合并相同的联通块,并且已经用了2个独立插头,那就是一条简单路径了... 需要特判路径上只有一个点的情况. 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #define ll long long

杭电ACM分类

杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze 广度搜索1006 Redraiment猜想 数论:容斥定理1007 童年生活二三事 递推题1008 University 简单hash1009 目标柏林 简单模拟题1010 Rails 模拟题(堆栈)1011 Box of Bricks 简单题1012 IMMEDIATE DECODABILITY

【转】对于杭电OJ题目的分类

[好像博客园不能直接转载,所以我复制过来了..] 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze 广度搜索1006 Redraiment猜想 数论:容斥定理1007 童年生活二三事 递推题1008 University 简单hash1009 目标柏林 简单模拟题1010 Rails 模拟题(堆栈)1011 Box of Bricks 简单题1012 IMMEDI

转载:hdu 题目分类 (侵删)

转载:from http://blog.csdn.net/qq_28236309/article/details/47818349 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029. 1032.1037.1040.1048.1056.1058.1061.1070.1076.1089.1090.1091.1092.1093. 1094.1095.1096.1097.1098.1106.1108.1157.116

插头与轮廓线与基于连通性状态压缩的动态规划

问题定义 什么是插头DP 在一个n*m的棋盘上(n与m很小),求: 有多少种不同的回路数 用1条回路经过所有点的方案数 用1条回路经过部分点的方案数 1条路径上的权值和最大 的这一类问题,通常可以用插头DP来解决. 这类问题通常很明显,但代码量大又容易出错,有时TLE有时MLE. 什么是基于状态压缩的动态规划 基于状态压缩的动态规划问题是一类以集合信息为状态且状态总数为指数级的特殊的动态规划问题. 在状态压缩的基础上,有一类问题的状态中必须要记录若干个元素的连通情况,我们称这样的问题为基于连通性

插头dp的几个模板

/* ural1519 求经过全部可行点的哈密顿回路的个数 括号匹配法,转移有点复杂,可是时间空间比較小 */ #include<cstdio> #include<cstring> #include<string> #include<iostream> #include<algorithm> #include<cmath> #include<map> #include<queue> #define LL lon

插头DP专题

建议入门的人先看cd琦的<基于连通性状态压缩的动态规划问题>.事半功倍. 插头DP其实是比较久以前听说的一个东西,当初是水了几道水题,最近打算温习一下,顺便看下能否入门之类. 插头DP建议先理解“插头”的概念.然后会HASH表(这个其实是很基础的东西,应该都会的).然后就是DP. 以及特殊题目的特殊处理. 好像一般是求N,M<=12的网格图的某种回路数或某种通路数的方案数. 大体上每个题说几句特殊处理,有问题请纠正....题目的顺序基本上难度递增 另外代码我都是用括号匹配的.因为感觉连通

[Python]HTML/XML解析器Beautiful Soup

[简介] Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库.即HTML/XMLX的解析器. 它可以很好的处理不规范标记并生成剖析树(parse tree). 它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作.它可以大大节省你的编程时间. [安装] 下载地址:点击打开链接 Linux平台安装: 如果你用的是新版的Debain或ubuntu,那么可以通过系统的软件包管理来安装: $ apt-get install Python-bs4 B