走迷宫题目
如果是求最短路径则用bfs
#include<iostream>
#include<vector>
#include <queue>
#include <array>
using namespace std;
class solution {
public:
int bfs(vector<vector<char>>& grid, int x, int y) {
int n = grid.size();
int m = grid[0].size();
vector<vector<bool>> vis(n, vector<bool>(m, false));
vector<vector<int>> f(n, vector<int>(m, 0));
queue<pair<int, int>> q;
q.push({ x,y });
while (!q.empty()) {
int rx = q.front().first;
int ry = q.front().second;
q.pop();
for (int k = 0; k < 4; k++) {
int nx = rx + dx[k];
int ny = ry + dy[k];
if (nx >= 0 && nx < n && ny >= 0 && ny < m && grid[nx][ny] == 'e') {
return f[rx][ry] + 1;
}
if ( nx >= 0 && nx < n && ny >= 0 && ny < m && grid[nx][ny] == '.'&&!vis[nx][ny]) {
vis[nx][ny] = true;
f[nx][ny] = f[rx][ry] + 1;
q.push({ nx,ny });
}
}
}
return -1;
}
array<int, 4> dx = { -1,0,1,0 };
array<int, 4> dy = { 0,1,0,-1 };
};
int main() {
int n, m;
cin >> n >> m;
int x, y;
vector<vector<char>> grid(n, vector<char>(m));
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> grid[i][j];
if (grid[i][j] == 's') {
x = i;
y = j;
}
}
}
cout <<solution().bfs(grid, x, y);
}
如果是求方案数,用回溯+dfs

凡岛公司福利 319人发布