上期我们说到了:
-
dfs的名字由来
-
思想与理念
-
实现代码
当然,dfs的用途肯定不止这一点,我们还可以使用dfs来输出迷宫路径
我们看看上一期的代码:
#include <iostream>
#include <string>
using namespace std;
int n, m;
string maze[110];
int sx, sy;
bool vis[110][110];
int dir[4][2] = { {1, 0}, { -1, 0}, {0, 1}, { 0, -1}};
bool in(int x, int y) {
return 0 <= x && x < n && 0 <= y && y < m;
}
bool dfs(int x, int y) {
vis[x][y] = true;
if (maze[x][y] == 'T') {
return true;
}
for (int i = 0; i < 4; i++) {
int tx = x + dir[i][0];
int ty = y + dir[i][1];
if (in(tx, ty) && !vis[tx][ty] && maze[tx][ty] != '*') {
if (dfs(tx, ty)) {
return true;
}
}
}
return false;
}
int main() {
cin >> n >> m;
for (int i = 0; i < n; i++) {
cin >> maze[i];
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (maze[i][j] == 'S') {
sx = i;
sy = j;
}
}
}
if (dfs(sx, sy)) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
return 0;
}
现在它只能进行判断是否能出去
接下来我们稍加改动...
1.在第十九行上面增加一行代码:
maze[x][y] = 'm'
2.我们接着在return 0前写:
for (int i = 0; i < n; i++) {
cout << a[i] << endl;
}
3.在dfs函数中的return false;前写上:
maze[x][y] == '.';
接下来我们输出路径的任务就大功告成了!