目录
例题
解题代码
解题思路
从坐标系的O点(即图的最上角)开始遍历,当遇到target的第一个字符后,开始DFS。当前层次的DFS搜索失败(不符合题意)后,需要进行回溯。
回溯作用:令程序退回到上层次DFS,以便于下次DFS搜索时进行操作。
递归写DFS的好处
递归存在栈的创建与销毁。其中栈的销毁操作极大的便于我们进行回溯的操作,使程序退回到上一层DFS的状态。
return DFS(x + dx[0], y + dy[0], target, K + 1,fakem)
||BFS(x + dx[1], y + dy[1], target, K + 1, fakem)
|| BFS(x + dx[2], y + dy[2], target, K + 1, fakem)
|| BFS(x + dx[3], y + dy[3], target, K + 1, fakem);
DFS参数解析
bool DFS(int x, int y,string target,int K, vector<vector<char>> fakem)
int x与int y
二维图中的某点在坐标系中的坐标。(x,y)
string target
所求字符串
int K(关键参数)
K用于指示当前DFS所要检索的是target的哪一个字符。
vector<vector<char>> fakem
DFS所检索的图
注意点
DFS函数的参数类型与个数的设计极为重要,是解题的关键。
上述解题代码的局限性
此代码为了利用递归进行回溯,DFS每一次进行递归都会创建一个新的形式参数fakem,当递归的次数较大时,极易可能爆栈。