(简单) 闯迷宫 (CD1775)

注意:把方向搞清楚就可以了。

 

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<vector>
#include<sstream>
#include<ctype.h>
using namespace std;



int map[111][111];
	int stx,sty,edx,edy;
bool vist[111][111];
bool ok;
int a[4][2]={{1,0},{0,-1},{-1,0},{0,1}};
int n;

inline bool in(int x,int y)
{
	return x>=0&&x<n&&y>=0&&y<n;
}

void dfs(int x,int y)
{
	//cout<<x<<' '<<y;
	
	int i,j,k;
	vist[x][y]=true;
	if (x==edx&&y==edy)
	{
		ok=true;
		return ;
	}

	int tox=-1,toy=-1;
	int big=111;
	for (i=0;i<4;i++) 
	{
		int xx=x+a[i][0];
		int yy=y+a[i][1];
		if (in(xx,yy)&&!vist[xx][yy]&&map[xx][yy]!=-1&&big>map[xx][yy])
		{
			tox=xx;
			toy=yy;
			big=map[xx][yy];
			
			
		}
	}
	
	if (big<111)
	dfs(tox,toy);

}
int main()
{
    freopen("in.txt","r",stdin);
    
	int i,j,k;

	int t;
	cin>>t;


	while (t--)
	{
		
		cin>>stx>>sty>>edx>>edy>>n;
		
		for (i=0;i<n;i++)
			for (j=0;j<n;j++)
				cin>>map[i][j];
		
		ok=false;
		memset(vist,false,sizeof(vist));
		if (map[stx][sty]!=-1)
		dfs(stx,sty);
		puts(ok?"Yes":"No");
	}


	return 0;
}


 

闯迷宫

Time Limit: 1000 ms Memory Limit: 65535 kB Solved: 11 Tried: 24

Submit

Status

Best Solution

Back

Description

xm要闯迷宫了。迷宫由n行n列的房间构成(10<=n<=100),每个房间有四个门,分别通向左边、上面、右边和下面的房间,靠边的房间靠边的门当然通向迷宫外。神仙告诉xm,每个房间有一个困难值(范围为[0,100]),有一些房间是不能进的(用-1表示)。而且只要进入迷宫,不能再进入已进去过的房间,也不能出迷宫再进来。神仙答应xm,只要他能到达指定的房间,他会实现xm的一个愿望。


xm相信简单中也有大机会,每次在选择下一个房间时,他总是在能选择中的房间中选择难度最小的。他能否获得实现愿望的机会呢?


为方便起见,把迷宫看作一个矩阵,矩阵的每个元素对应一个房间,矩阵下标从0开始,最左边是第0列,最上边是第0行。你的任务是从给出的xm起始位置和神仙指定的房间位置,判断xm能否获得机会,如果能,则输出“Yes”;否则输出“No”。出现值相同时,按下、左、上、右的顺序,取较前者。


Input

含多组测试数据,输入首先是一个整数T表示测试数据组数(0 < T <= 150)。随后有T组测试数据,每组的第一行是5个用一个空格隔开的整数,前两个表示xm的起始位置,后两个表示目标房间位置,最后一个数字表示迷宫由 n*n个房间构成,随后是一个n*n的整数矩阵。

Output

对应每组测试数据,输出一行的结果。

Sample Input

2
0 3 5 1 6
56 8 30 44 94 -1
39 65 -1 -1 91 1
5 89 -1 25 -1 -1
51 38 -1 -1 7 20
10 -1 95 43 71 97
61 26 -1 57 70 65
0 3 1 5 6
56 8 30 44 94 -1
39 65 -1 -1 91 95
5 89 -1 25 -1 -1
51 38 -1 -1 7 20
10 -1 18 43 71 97
61 26 -1 57 70 65

Sample Output

Yes
No

Source

wxiaoping - 2012

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值