DFS解有解性问题

本文讲述了递归深度优先搜索(DFS)在解决特定问题中的解题思路,强调了其回溯操作的优势以及如何通过栈实现。同时,讨论了DFS函数参数设计的重要性,并指出了在处理大规模数据时,递归可能导致栈溢出的局限性。
摘要由CSDN通过智能技术生成

目录

例题

解题代码

解题思路

递归写DFS的好处

DFS参数解析

int x与int y

string target

int K(关键参数)

vector> fakem

注意点

上述解题代码的局限性


例题

解题代码

解题思路

从坐标系的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,当递归的次数较大时,极易可能爆栈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值