`
lgh1992314
  • 浏览: 315657 次
文章分类
社区版块
存档分类
最新评论

zoj2100Seeding(水题)

 
阅读更多
Seeding
Time Limit:2 Seconds Memory Limit:65536 KB
It is spring time and farmers have to plant seeds in the field. Tom has a nice field, which is a rectangle with n * m squares. There are big stones in some of the squares.

Tom has a seeding-machine. At the beginning, the machine lies in the top left corner of the field. After the machine finishes one square, Tom drives it into an adjacent square, and continues seeding. In order to protect the machine, Tom will not drive it into a square that contains stones. It is not allowed to drive the machine into a square that been seeded before, either.

Tom wants to seed all the squares that do not contain stones. Is it possible?


Input

The first line of each test case contains two integers n and m that denote the size of the field. (1 < n, m < 7) The next n lines give the field, each of which contains m characters. 'S' is a square with stones, and '.' is a square without stones.

Input is terminated with two 0's. This case is not to be processed.


Output

For each test case, print "YES" if Tom can make it, or "NO" otherwise.


Sample Input

4 4
.S..
.S..
....
....
4 4
....
...S
....
...S
0 0


Sample Output

YES
NO



从左上角,一次性走完所有的点。

#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 10;
char maps[MAXN][MAXN];
bool visited[MAXN][MAXN];
const int moves[4][2] = {0,-1,1,0,-1,0,0,1};
int m,n,stone;
bool flag;

bool DFS(int x,int y,int level)
{
	if(n * m - stone == level)
	{
		flag = true;
		return true;
	}
	for(int i=0;i<4;i++)
	{
		int p = x + moves[i][0];
		int q = y + moves[i][1];
		if(p>=1&&p<=n&&q>=1&&q<=m&&maps[p][q]=='.'&&!visited[p][q])
		{
			visited[p][q] = true;
			DFS(p,q,level+1);
			if(flag) return true;
			visited[p][q] = false;
		}
	}
	return false;
}

int main()
{
	freopen("in.txt","r",stdin);
	int i,j;
	while(cin>>n>>m&&n+m)
	{
		memset(maps,0,sizeof(maps));
		memset(visited,false,sizeof(visited));
		stone = 0;
		for(i=1;i<=n;i++)
		{
			for(j=1;j<=m;j++)
			{
				cin>>maps[i][j];
				if(maps[i][j]=='S')
					stone++;
			}
		}
		visited[1][1] = true;
		flag = false;
		bool ans = DFS(1,1,1);
		if(ans) cout<<"YES"<<endl;
		else cout<<"NO"<<endl;

	}
}

当然可以不用visited数组

#include <iostream>
#include <cstring>
using namespace std;
#pragma warning(disable : 4996)
const int MAXN = 10;
char maps[MAXN][MAXN];
const int moves[4][2] = {{0, -1}, {0, 1}, {1, 0}, {-1, 0}};
int m, n, stone;
bool flag;

void DFS(int x, int y, int cnt)
{
	if(stone + cnt == n * m)
	{
		flag = true;
		return;
	}
	for(int i = 0; i < 4; i++)
	{
		int p = x + moves[i][0];
		int q = y + moves[i][1];
		if(p >= 1 && p <= n && q >= 1 && q <= m && maps[p][q] == '.')
		{
			maps[p][q] = 'S';
			DFS(p, q, cnt + 1);
			maps[p][q] = '.';
		}
	}
}

int main()
{
	freopen("in.txt", "r", stdin);
	int i, j;
	while(cin >> n >> m)
	{
		if(n == 0 && m == 0)
		{
			break;
		}
		stone = 0;
		for(i = 1; i <= n; i++)
		{
			for(j = 1; j <= m; j++)
			{
				cin >> maps[i][j];
				if(maps[i][j] == 'S')
				{
					stone++;
				}
			}
		}
		flag = false;
		maps[1][1] = 'S';
		DFS(1, 1, 1);
		if(flag)
		{
			cout << "YES" << endl;
		}
		else
		{
			cout << "NO" << endl;
		}
	}
	return 0;
}



分享到:
评论

相关推荐

    POJ、HDU、ZOJ、SOJ水题过滤器

    标题中的“POJ、HDU、ZOJ、SOJ水题过滤器”指的是一个工具,它主要用于帮助在ACM(国际大学生程序设计竞赛)训练中筛选出这些在线判题系统中的简单题目,即所谓的“水题”。这些在线判题平台是编程爱好者和参赛者们...

    zoj 源码700题

    【标题】"zoj 源码700题"是指一个包含700多道ZOJ(在线判题系统Zhejiang Online Judge)编程竞赛题目的源代码集合。这个资源对于学习算法、提高编程技能以及准备编程竞赛的学员来说极具价值。 【描述】"包含了zoj...

    ZOJ完全解题报告,涵盖了几十道ZOJ上面的编程题,有很详细的解题方法供参阅

    【ZOJ完全解题报告】是一份专门为喜爱ACM(国际大学生程序设计竞赛)的同学们准备的资源,其中详尽地记录了解决ZOJ在线判题系统上几十道编程题目的全过程和方法。这份报告旨在帮助参赛者提高解题技巧,理解和掌握...

    ZJU/zoj 题库上的部分题源码

    【标题】"ZJU/zoj 题库上的部分题源码"涉及的知识点主要集中在ACM(国际大学生程序设计竞赛)编程领域,尤其是浙江大学(ZJU)ZOJ(Zhejiang University Online Judge)题库中的题目解决方案。ZOJ是一个在线编程评测...

    zoj 题库 详细解答 解题代码

    zoj 题库 详细解答 解题代码 该资源主要涵盖了 zoj 题库中的各种编程题目,涵盖了基本算法、数据结构、数学运算等多个方面的知识点。下面是对该资源中出现的知识点的详细解释: 1. 第一次 ACM 总结(7th ACM) 该...

    ZOJ 700多题源代码

    标题中的"ZOJ 700多题源代码"指的是一个包含了浙江大学在线评测系统ZOJ(Zhejiang University Online Judge)上超过700道编程题目的解决方案集合。这个资源对于学习算法、准备ACM/ICPC(国际大学生程序设计竞赛)...

    zoj 1002_zoj1002_

    题目编号1002,通常表示该题是ZOJ平台上的一个问题,可能涉及算法、数据结构或特定编程技巧的运用。 【描述】"ACM中ZOJ1002的可运行C++程序" 提示我们,这个压缩包包含了一个用C++语言编写的程序,该程序是为了解决...

    zoj 1140-zju 2433 简单题的部分答案

    标题 "zoj 1140-zju 2433 简单题的部分答案" 暗示了这是一个关于编程竞赛题目的解答集合,其中涵盖了ZOJ(浙江大学在线评测系统)上的两道题目——ZOJ 1140 和 ZJU 2433。这些题目可能属于算法或数据结构的范畴,...

    ZOJ题目答案源码

    ZOJ(Zhejiang Online Judge)是一个著名的在线编程竞赛平台,主要面向计算机科学与信息技术的学生和爱好者,提供了大量的算法题目供参赛者练习和提交代码。"ZOJ题目答案源码"是一个压缩包文件,其中包含了700多道...

    ZOJ:浙江大学程序在线评测系统.docx

    ZOJ,全称“浙江大学程序在线评测系统”(Zhejiang University Online Judge),是一个提供信息学(算法竞赛)题库及程序评测的网站。以下是关于ZOJ的详细介绍: 一、基本信息 名称:浙江大学程序在线评测系统(ZOJ)...

    ACM训练必备POJ ZOJ题目分类及解题思路

    学习ACM程序设计的朋友一定要看,这是训练必备的POJ ZOJ题目分类及解题思路

    zoj1027解题指南

    【标签】"zoj1027"标签直接关联到具体的ZOJ在线判题系统中的题目编号,表明讨论和资源都是针对这个特定的编程问题。 【压缩包子文件的文件名称列表】:"zoj1027 求串相似度.cpp" 这个文件名揭示了ZOJ1027题目的核心...

    ZOJ.zip_Jugs A_ZOJ NTA_zoj acm_zoj acm 1216_zoj code

    这个问题可能涉及到实际生活中的数学问题,比如水壶倒水的问题,需要通过编程来解决如何将一定量的水从一个容器倒入另一个容器,使得达到特定的容量。 【ZOJ NTA】这部分标签可能是某种特定的活动、比赛或者专题的...

    浙江大学ZOJ题目分类

    描述中的“初学者题”适合刚刚接触算法和编程的人群,这些题目通常较为简单,主要涉及基本的逻辑思维和编程基础。例如,可能包含简单的输入输出处理、基本数学计算、字符串操作等。通过这些题目,初学者可以熟悉编程...

    ZOJ四百多道题的源码

    【标题】"ZOJ四百多道题的源码"所蕴含的知识点主要集中在ACM(国际大学生程序设计竞赛)的解题策略和编程技术上。ZOJ(Zhejiang University Online Judge)是浙江大学主办的一个在线评测系统,专门用于ACM/ICPC...

    zoj 700源代码

    这个压缩包文件名为"ZOJ 700多题源代码",意味着它包含了解决ZOJ平台上700道编程题目的源代码。这些源代码可能是由参赛者或编程爱好者贡献的,用于学习、参考和分享解题思路。 在这些源代码中,你可以找到以下重要...

    Problem Arrangement zoj 3777

    Problem Arrangement zoj 3777

    zoj.gz_ ZOJ_ZOJ 1016_max flow_zoj 1045_zoj.rar

    标题中的"ZOJ.gz_ ZOJ_ZOJ 1016_max flow_zoj 1045_zoj.rar" 提到了两个ZOJ(Zhejiang Online Judge)的题目,分别是1016和1045,这两个数字通常代表在线编程竞赛中的题目编号。这些题目通常涉及到算法和数据结构的...

    zoj.rar_zoj_zoj4041

    2. **时间复杂度与空间复杂度**:考虑到在线判题系统对于运行时间的限制,高效的代码是必不可少的。开发者需要权衡时间和空间复杂度,确保程序在限定资源内快速运行并得出正确结果。 3. **数据结构**:合适的数据...

Global site tag (gtag.js) - Google Analytics