文档章节

ZOJ Problem Set - 2100

 木宛城主
发布于 2015/03/02 19:38
字数 468
阅读 2
收藏 0
ZOJ Problem Set - 2100
Seeding
Time Limit: 1 Second       Memory Limit: 32768 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

=============

典型的DFS题,很不错。

题目很简单,从左上角出发,判断是否能完全把地耕玩(拖拉机不能在石块和已经耕好的地上行驶。

#include <stdio.h>
#include <string.h>
int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};//四个方向 
char map[10][10];//定义一张地图 
int done;
int Flag;
int n,m;
void dfs(int x,int y) 
{
  int i;
  if(x<1 || y<1 || x>n || y>m)   return;//判断是否越界  
  done++; 
  if(done==n*m)//如果成功则返回 
  {
     Flag=1;
     return;
  }
  for(i=0;i<4;i++)
  {
     if(map[x+dir[i][0]][y+dir[i][1]]=='.')
     {
	 
	     map[x+dir[i][0]][y+dir[i][1]]='S';//标记已经耕过的土地 
	     dfs(x+dir[i][0],y+dir[i][1]);
	 }
  }
  done--;
  map[x][y]='.';
}
int main()
{
   int i,j;  
   memset(map,'S',sizeof(map));
   while(scanf("%d%d%*c",&n,&m)!=EOF)
   {
      if(n==0 && m==0)
      break;
      done=0;
      Flag=0;
      for(i=1;i<=n;i++)
      {
	     
		 for(j=1;j<=m;j++)
	     {
		    scanf("%c",&map[i][j]);
		    if(map[i][j]=='S')
		    done++;
		 }
		 getchar();
	  
	  }
	 	 
	  map[1][1]='S';
	  dfs(1,1);
	  if(Flag==1)
	  printf("YES\n");
	  else
	  printf("NO\n");
   }
return 0;

}

© 著作权归作者所有

共有 人打赏支持
粉丝 2
博文 222
码字总数 199010
作品 0
黄浦
ACM Summer Training Warm up

ACM Summer Training Warm up Cover 热身水题 题目 HDU 4500 小Q系列故事——屌丝的逆袭 思路 简单的模拟,一个数组读入数据,一个数组计算维护结果 HDU 2109 Fighting for HDU 思路 简单排序...

SpiffyEight77
2017/08/14
0
0
使用ZooKeeper

安装好 ZooKeeper 之后,可以使用telnet来测试是否运行。 这里使用的是单机 standalone 模式。 也可以使用客户端脚本来连接服务器 连接上之后就可以像使用 NOSQL(memcached,redis) 数据库一样...

兔之
2015/10/12
69
0
ZOJ Problem Set - 1016 Parencodings

Parencodings Time Limit: 2 Seconds Memory Limit: 65536 KB Let S = s1 s2 ... s2n be a well-formed string of parentheses. S can be encoded in two different ways: By an integer seq......

hushhw
2017/11/27
0
0
ZOJ Problem Set - 2104 Let the Balloon Rise(map)

Let the Balloon Rise Time Limit: 2 Seconds Memory Limit: 65536 KB Contest time again! How excited it is to see balloons floating around. But to tell you a secret, the judges' fa......

hushhw
2017/11/27
0
0
ZOJ Problem Set - 1094 Matrix Chain Multiplication

Matrix Chain Multiplication Time Limit: 2 Seconds Memory Limit: 65536 KB Matrix multiplication problem is a typical example of dynamical programming. Suppose you have to evaluat......

hushhw
2017/11/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

python3.6 取余运算

python中取余运算逻辑如下: 如果a 与d 是整数,d 非零,那么余数 r 满足这样的关系: a = qd + r , q 为整数,且0 ≤ |r| < |d|。 经过测试可发现,python3.6中取余运算得到的 r 是正整数;...

colinux
18分钟前
1
0
[雪峰磁针石博客]软件测试专家工具包1web测试

web测试 本章主要涉及功能测试、自动化测试(参考: 软件自动化测试初学者忠告) 、接口测试(参考:10分钟学会API测试)、跨浏览器测试、可访问性测试和可用性测试的测试工具列表。 安全测试工具...

python测试开发人工智能安全
今天
3
0
JS:异步 - 面试惨案

为什么会写这篇文章,很明显不符合我的性格的东西,原因是前段时间参与了一个面试,对于很多程序员来说,面试时候多么的鸦雀无声,事后心里就有多么的千军万马。去掉最开始毕业干了一年的Jav...

xmqywx
今天
3
0
Win10 64位系统,PHP 扩展 curl插件

执行:1. 拷贝php安装目录下,libeay32.dll、ssleay32.dll 、 libssh2.dll 到 C:\windows\system32 目录。2. 拷贝php/ext目录下, php_curl.dll 到 C:\windows\system32 目录; 3. p...

放飞E梦想O
今天
1
0
谈谈神秘的ES6——(五)解构赋值【对象篇】

上一节课我们了解了有关数组的解构赋值相关内容,这节课,我们接着,来讲讲对象的解构赋值。 解构不仅可以用于数组,还可以用于对象。 let { foo, bar } = { foo: "aaa", bar: "bbb" };fo...

JandenMa
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部