自己写的DFSTemplate:
// DFS_Template.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" //DFS的思想是:一直向下搜索 //内部逻辑有两种: //1.不走:找到解 or 走不下去了 //2.走:满足条件的下一个状态重复进行DFS #include <iostream> #include <string.h> using namespace std; const int N = 10; int visit[N][N], map[N][N]; int dir[4][2] = { 1, 0, -1, 0, 0, 1, 0, -1 }; void DFS(int x,int y) { //判断是否满足解 //判断是否走不下去了 for (int i = 0; i < 4; i++) { int nx = x + dir[i][0]; int ny = y + dir[i][1]; //判断新点是否满足继续搜索的条件 if (nx >= 0 && nx <= N && ny >= 0 && ny <= N && visit[nx][ny] == 0) { //标记点 visit[x][y] = 1;//最好把vis标记放在DFS函数外面,这样子集树的结构比较明显,调试也方便 DFS(nx, ny); } } } int main() { //初始化 memset(visit, 0, sizeof(visit)); //标记点 visit[0][0] = 1; DFS(0, 0); }