NENU 怪盗基德的游戏

Description

 

Kid和新一开始玩一个有趣的游戏。游戏规则是这样的:在一个n*m棋盘中,某个位置有一颗棋子,并且有些位置是不能走的。现在两个人轮流操作,每次可以将棋子向上下左右的格子里走一格,不能走出边界。若一方不能行动,或者走到了已经走过的格子,则算失败。
现在给出棋盘的初始状态,柯南先行。请判断当双方均用最优策略时,柯南是否可以获胜。

Input

数据有多组。
第一行为两个数n, m (2 <= n, m <= 5)。代表棋盘有n行m列。
接下来有n行,每行m个字符,代表棋盘的初始状态。其中’.’代表可行区域,’x’代表不能走的区域,’S’代表棋子的初始位置。

Output

对每组数据,若柯南可以获胜,则输出”Yes”;否则输出”No”。

Sample Input

3 3

Sx.

.x.

...

Sample Output

No

 

#include <cstdio>
#include <cstring>
#include <iostream>
#define Maxn 6
using namespace std;

char map[Maxn][Maxn];
int m,n;
int mark[Maxn][Maxn];
int const dir[4][2] = {0, 1, 0, -1, 1, 0, -1, 0};

inline bool check(int x, int y) 
{
    return x >= 0 && x < n && y >= 0 && y < m && map[x][y] == '.';
}

int dfs(int x,int y)
{
	mark[x][y]=1;
	int tx,ty;
	bool flag=0;
	for(int i=0;i<4;i++)
	{
		tx=x+dir[i][0];
		ty=y+dir[i][1];
		if(check(tx,ty) && !mark[tx][ty])
			flag|=!dfs(tx,ty);
	}
	mark[x][y]=0;
	return flag;
}

int main()
{
	while(~scanf("%d %d",&n,&m))
	{
		if(n==0)	break;
		for(int i=0;i<n;i++)
			scanf("%s",map[i]);
		memset(mark, 0, sizeof(mark));
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				if(map[i][j]=='S')
				{
					if(dfs(i,j))	printf("Yes\n");
					else	printf("No\n");
					goto skip;
				}
			}
		}	
		skip:;
	}
	return 0;
}

 

大致思路:从柯南开始,每次对周围进行搜索,每次将flag进行取反操作,表示柯南与基德的不同回合。如果dfs到了一条flag true的路径,则输出yes。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可乐视频社区是一款专业的在线视频直播软件平台软件。软件采用多视频窗口,为用户提供在线交友、在线K歌平台,并辅以小喇叭、印章、礼物等多种道具结合,为用户打造完美的真实交友新体验。需要的朋友快来下载吧! 可乐视频社区特征 1、三公麦视频的互动。在可乐视频社区内,每个房间单位都有三个公麦,用户可以选择上公麦展示自己才艺,与好友交流,发表观点。三视频的设计,能够更好的为用户互动服务。 2、礼物的设计。在可乐视频社区内,您可以向其他好友赠送礼物,增强了感情交流方式,多种礼物设计,对社区内气氛,产生了很强的互动性和传递性。 3、印章的设计。印章是可乐视频社区的独特产品,通过好友之间的加盖印章,对社区内的娱乐性是很大的补充。更会产生搞、涂鸦等效果。 4、多种场景设计。场景的设计,能够更好、更炫的表现出您的与众不同。是社区内的身份、地位的体现。 5、小喇叭全站呼叫。可乐视频具有小喇叭功能。使用下喇叭,可以把你想说的话,发到全站,在可乐视频社区内的用户,都可以看得到,想说就说,快乐小喇叭。 6、道具的使用。在可乐视频社区内,有橡皮擦,斗转星移等道具,使用道具,增添了社区内的娱乐气氛,与你的好友,进行快乐玩笑。 7、多种会员身份。可乐视频社区内,具有多种会员身份,每种身份都有不同的权限,体验出在可乐视频社区内的独特地位。   可乐视频社区截图

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值