深度优先搜索
从起点出发,走过的点要做标记,发现有没走过的点,就随意挑一个往前走,走不了就回退,此种路径搜索策略就称为“深度优先搜索”,简称“深搜”。
其实称为“远度优先搜索”更容易理解些。因为这种策略能往前走一步就往前一
步,总是试图走得更远。
所谓远近(或深度),就是以距离起点的步数来衡量的。
这个过程和递归的性质很像,所以一般用递归来实现这个过程
深度优先搜索其实就是一个不断回溯的过程
图遍历所有的点
例 HDU 1312.
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int w, h, num;
#define check(x,y)(x<h&&x>=0&&y<w&&y>=0)//判断是否越界
char room[23][23] = { '0' };
int dir[4][2] = {//控制方向
{0,1},
{0,-1},
{-1,0},
{1,0},
};
int color[23][23] = { 0 };//标记数组
void dfs(int i, int j) {