NOJ 1141.走迷宫

1141.走迷宫

时限:1000ms 内存限制:10000K  总时限:3000ms

描述

判断是否能从迷宫的入口到达出口

 

输入

先输入两个不超过20的正整数表示迷宫的行数m和列数n,再输入口和出口的坐标,最后分m行输入迷宫,其中1表示墙,0表示空格每个数字之间都有空格。

 

输出

只能向上、下、左、右四个方向走若能到达,则输出"Yes",否则输出"No",结果占一行。

 

输入样例

3 3
0 0
2 2
0 0 0
1 1 0
0 1 0

 

输出样例

Yes

 

提示

 

来源

#include<iostream>
using namespace std;
int next[4][2]={{0,-1},{0,1},{-1,0},{1,0}};
int i,j,n,m,a[25][25];
int book[25][25] = {0};
int x1,y1,x2,y2,flag = 0;
void dfs(int x,int y){
	int i;
	if(x == x2&&y == y2){
		cout<<"Yes"<<endl;
		flag = 1;
		return ;
	}
	for(i = 0;i < 4;i++){
		int x3 = x + next[i][0];
		int y3 = y + next[i][1];
		if((x3 >= 0&&x3 < m)&&(y3 >= 0&&y3 < n)&&a[x3][y3]==0&&book[x3][y3] == 0&&flag == 0){
			//未越界,未找到路径,下一个点未被访问 
			book[x3][y3] = 1;
			dfs(x3,y3);
		}
	}
	
}
int main(){
//	freopen("input.txt","r",stdin);
	
	cin>>m>>n>>x1>>y1>>x2>>y2;
	for(i = 0;i < m;i++){
		for(j = 0;j < n;j++){
			cin>>a[i][j];
		}
	}
	book[x1][y1] = 1;
	dfs(x1,y1);
	if(flag == 0){
		cout<<"No"<<endl;
	}
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值