描述:
判断是否能从迷宫的入口到达出口
输入:
先输入两个整数表示迷宫的行数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 sx, sy, fx, fy; //起点和终点
int row, col; //迷宫的行数和列数
int maze[1000][1000]; //迷宫数组
int visit[1000][1000]; //是否走过
int state = 0; //是否找到
int dir[4][2] = {{1,0}, {-1,0}, {0,-1}, {0,1}}; //上下左右四个方向
int legal(int x, int y)
{
//未越界,且可走通, 没有访问过
if(x >= 0 && x < row && y >= 0 && y < col && maze[x][y] == 0 && visit[x][y] == 0)
return 1;
else
return 0;
}
void dfs(int x, int y)
{
//找到目标
if(x == fx && y == fy)
{
state = 1;
return;
}
visit[x][y] = 1; //标记maze[x][y]已访问
for(int i = 0; i < 4; i ++)
{
int nx = x+dir[i][0]; //新的坐标
int ny = y+dir[i][1];
//cout << "nx = "<<nx << "\tny = "<< ny << endl;
if(legal(nx, ny)) //新坐标合法
dfs(nx, ny);
}
}
int main()
{
cin >> row >> col;
cin >> sx >> sy;
cin >> fx >> fy;
for(int i = 0; i < row; i++)
for(int j = 0; j < col; j++)
cin >> maze[i][j];
dfs(sx, sy);
if(state == 1)
cout << "Yes" << endl;
else
cout << "No" << endl;
return 0;
}