DFS求解迷宫问题
给定一个迷宫地图,实际就是一个二维的数组,其中0代表可通过,1代表有障碍不能通过,求出所有路径。这种搜索问题一般使用深度搜索DFS,从出口处开始,根据选择的不同方向(上下左右)来到达另一个位置,这时可以把新到达的位置看做是新的起点,这样就可以递归的求解同样的子问题,递归结束的条件是最后到达了终点。在搜索的过程中,我们可以进行剪枝操作,我们先沿着某个方向走,并沿途把走过的节点进行标记,沿着某个节点一直搜索下去,不中南墙不回头,直到碰到障碍,或者数组越界,走到了已经访问过的节点,这时就直接返回,不必再继续搜索下去,可以称之为回溯,实际是递归的返回。
下面为具体代码:
#include <iostream>
#include <stdlib.h>
#include <vector>
#include <string>
using namespace std;
//迷宫问题
#define M 5//行数
#define N 5//列数
int map[M][N] = {
{ 0, 1, 0, 0, 0 },
{ 0, 0, 0,