时限: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>
#include <stdio.h>
using namespace std;
int sx,sy,fx,fy;
int row,col;
int maze[25][25];
int visited[25][25];
int flag = 0;
int dir[4][2] = {{1,0},{-1,0},{0,-1},{0,1}};
void dfs(int x,int y)
{
if(x == fx&&y == fy)
{
flag = 1;
return;
}
visited[x][y] = 1;
for(int i = 0;i < 4;i++)
{
int nx = x + dir[i][0];
int ny = y + dir[i][1];
if(nx >= 0 && nx < row && ny >= 0 && ny < col && maze[nx][ny] == 0 && visited[nx][ny] == 0)
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(flag == 1)
{
cout << "Yes" << endl;
}
else
{
cout << "No" << endl;
}
return 0;
}
用到了深搜算法,广搜貌似会内存超限……