计蒜客T1595 - 迷宫(一)
题目链接
一天蒜头君掉进了一个迷宫里面,蒜头君想逃出去,可怜的蒜头君连迷宫是否有能逃出去的路都不知道。
看在蒜头君这么可怜的份上,就请聪明的你告诉蒜头君是否有可以逃出去的路。
输入格式
第一行输入两个整数 n n n 和 m m m,表示这是一个 n × m n \times m n×m 的迷宫。
接下来的输入一个 n n n 行 m m m 列的迷宫。其中S
表示蒜头君的位置,*
表示墙,蒜头君无法通过,.
表示路,蒜头君可以通过.
移动,T
表示迷宫的出口(蒜头君每次只能移动到四个与他相邻的位置——上,下,左,右)。
输出格式
输出一个字符串,如果蒜头君可以逃出迷宫输出yes
,否则输出no
。
数据范围
1 ≤ n , m ≤ 10 1 \le n, m \le 10 1≤n,m≤10。
样例输入1
3 4
S**.
..*.
***T
样例输出1
no
样例输入2
3 4
S**.
....
***T
样例输出2
yes
解法:深度优先搜索 (DFS)
语言:C++ (C++14)
#include <iostream>
#include <vector>
using namespace std;
int n, m;
char map[15][15];
const int di[4][2] = {
{
0, 1}, {
0, -1}, {
1, 0}, {
-1, 0}};
bool ans = false;
void dfs(int x, int y) {
if (map[x][y] == 'T') {
ans = true;
return;
}
map[x][y] = '#';
for (auto & i : di) {
int x_next = x + i[0];
int y_next = y + i[1];
if (x_next >= 0 && x_next < n && y_next >= 0 && y_next < m && (map[x_next][y_next] == '.' || map[x_next]