洗白的迷宫
跳转链接
要点
深度优先搜索, 记得维护路径!!(不会返回原路)
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int N = 60;
typedef pair<int, int> PII;
char map[N][N];
int path[N][N];
int dx[] = { 1, 0, -1, 0 }, dy[] = { 0, 1, 0, -1 }, sx, sy;
queue<PII> q;
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
{
char c;
cin >> c;
if (c == '@') sx = i, sy = j;
map[i][j] = c;
}
memset(path, -1, sizeof(path));
q.push({ sx, sy });
path[sx][sy] = 0;
while(!q.empty())
{
int x = q.front().first, y = q.front().second;
if (map[x][y] == 'E')
{
puts("Yes");
return 0;
}
for (int i = 0; i < 4; i++)
{
int x = q.front().first + dx[i], y = q.front().second + dy[i];
if (x >= 0 && x < n && y >= 0 && y < n && map[x][y] != '#' && path[x][y] == -1)
{
q.push({ x, y });
path[x][y] = path[q.front().first][q.front().second];
}
}
q.pop();
}
puts("No");
return 0;
}