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;
}