迷宫的最短路径一般来说用BFS做,但是也可以用DFS做,如果最优路径只有一条的话,穷尽所有的路径然后找出路径最短的就好了。
不废话,先上BFS代码,这个代码中,用到了每一个位置的前驱节点,需要记住。然后逆着路径打印出来。
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
typedef pair<int, int> pii;
void bfs(int a[10][10], int m, int n,int i, int j, pii pre[10][10])
{
queue<pii> q;
if (a[i][j] == 0)
{
q.push({ i, j });
}
while (!q.empty())
{
pii tmp = q.front();
q.pop();
if (tmp.first + 1 < m && a[tmp.first + 1][tmp.second] == 0)
{
pre[tmp.first + 1][tmp.second] = tmp;
q.push({ tmp.first + 1, tmp.second });
if (tmp.first + 1 == m - 1 && tmp.second == n - 1)
break;
}
if (tmp.second + 1 < n && a[tmp.first][tmp.second + 1] == 0)
{
pre[tmp.first][tmp.second + 1] = tmp;
q.push({ tmp.first, tmp.second + 1 });
if (tmp.first == m - 1 && tmp.second + 1 == n - 1)
break;
}
if (tmp.first - 1 >= 0 && a[tmp.first - 1][tmp.second] == 0)
{
pre[tmp.first - 1][tmp.second] = tmp;
q.push({ tmp.first - 1, tmp.second });
if (tmp.first - 1 &