Newguy


私信TA

用户名:772007765

访问量:88801

签 名:

已秃人士

等  级
排  名 29
经  验 15363
参赛次数 3
文章发表 92
年  龄 0
在职情况 在职
学  校
专  业

  自我简介:

#include <stdio.h>      //Dfs深度优先搜索     注意搜索深度t
#include <string.h>
char D[20][20];
int t,n,m;
int road(int i,int o,int timet)
{
	int time[4]={0},j;
	if (D[i][o]=='E')
		return 1;
	if (timet==0)
		return 100;
	D[i][o]='#';
	if (o<m-1&&D[i][o+1]!='#')
		time[0]=road(i,o+1,timet-1)+1;
	else
		time[0]=100;
	if (o>0&&D[i][o-1]!='#')
		time[1]=road(i,o-1,timet-1)+1;
	else
		time[1]=100;
	if (i>0&&D[i-1][o]!='#')
		time[2]=road(i-1,o,timet-1)+1;
	else
		time[2]=100;
	if (i<n-1&&D[i+1][o]!='#')
		time[3]=road(i+1,o,timet-1)+1;
	else
		time[3]=100;
	D[i][o]='.';
	for (j=1;j<4;j++)
		if (time[0]>time[j])
			time[0]=time[j];
	return time[0];
}
	
int main()
{
	int i,o,k,l,time;

	while (scanf("%d%d%d",&n,&m,&t)!=EOF&&n&&m)
	{
		getchar();
		for (i=0;i<n;i++)
		{
			gets(D[i]);
			for (o=0;o<m;o++)
			{
				if (D[i][o]=='S')
				{
					k=i;
					l=o;
				}
			}
		}
		time=road(k,l,t-1);
		if (time<=1||time>t)
			printf("Tragedy!!!\n");
		else
			printf("Oh Yes!!!\n");
	}
	return 0;
}

描述

悲剧的雅典娜又被坏蛋抓走了!于是乎,正在马尔代夫度假的青铜五小强又要加班了-_-!

这次雅典娜被抓到了一个迷宫中,这个迷宫是方形的,且只有一层,由n*m个完全一样的正方形房间组成。

青铜五小强来到了房间S,也就是他们的起始点,雅典娜被关在房间E。而其他的房间,有些无法进入。小强们只能向前后左右四个方向行进,他们每到达一个新的房间就会消耗1个单位的时间。

已知雅典娜只能坚持t个单位的时间,时间一过立马挂掉,现在给你迷宫的布局、青铜五小强的起始位置S、雅典娜被关的位置E,请你判断小强们是否能够在雅典娜挂掉之前找到她。

注意:我们规定小强们到达起始位置时已经消耗了1个单位的时间了。

输入

输入包含多组测试数据。 每组输入的第一行为3个整数n,m,t(0<=n,m<=10,1<=t<=20),t表示雅典娜能够坚持的时间,n和m不会同时为1,当n和m中有一个为0或都为0时,输入结束。 
接下来n行,每行输入m个字符,每个字符表示一个房间的情况: 
‘.’:表示此房间可以通过。 
‘#’:表示此房间不可以通过,需要绕道。 
‘S’:表示青铜五小强的其实位置。 
‘E’:表示雅典娜被关的位置。 
题目保证每组输入有且仅有一个S和E。

输出

对于每组输入,如果能够在雅典娜挂掉之前找到她,输出“Oh Yes!!!”,否则输出“Tragedy!!!”。

样例输入1

4 4 10
....
....
....
S##E
3 4 20
.#E.
.S#.
.#..
3 0 5

样例输出1

Oh Yes!!!
Tragedy!!!


 

0.0分

0 人评分

  评论区

  • «
  • »