算法C++ DepthFirstSearch BreadthFirstSearch代码模式示范实现(第四章)
发布日期:2021-06-30 22:29:34 浏览次数:2 分类:技术文章

本文共 1113 字,大约阅读时间需要 3 分钟。

文章目录


造轮子博客链接


DFS可在STL中补充功能 下面的代码模式是结合的邻接表


DFS代码实现(递归模板示范)

//不妨可以在邻接表中增加一行 //这个算法再补充一点是回溯法的核心思想//可作为检测两个节点是否相连的算法访问bool visit[v1] = false; //v1为节点最大数 初始化为全没有访问过bool Backtracking(int v1,int v2){
if(visit[v1]) return false; if(v1 == v2) return true;//找到后返回 bool ret = false; visit[v1] = true; for(const auto& num:G[v1]) {
if(!visit[num]) ret = Backtracking(num); if(ret) return true; } //当所有节点遍历完都没有返回时 我们即返回false 没有找到我们需要找到的点 return false;};

代码实现(BFS模板示范)

//在我的理解中 这个BFS其实和二叉树层序遍历是一个原理的//有STL库相对于我之前学习C的还需要用next pre记号来标记的时候 就方便的多了//利用vector数组来表示下一层我们需要检查的//visit bool数组防止重复访问造成不必要的检查vector
visit(v1,false);//v1为节点最大数 初始化为全没有访问过vector
nowlevel,nextlevel;bool BreadthFirstSearch(int v1,int v2){
if(v1 == v2) return true; nowlevel.push_back(v1); visit[v1] = true; while(!nowlevel.empty()) {
for(const auto& num:nowlevel) {
for(const auto& temp:G[num]) {
if(temp == v2) return true; if(visit[temp]) continue; nextlevel.push_back(temp); visit[temp] = true; } } nowlevel = nextlevel; nextlevel.clear(); } return false;}

转载地址:https://love6.blog.csdn.net/article/details/115798651 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:算法C++ 面试常考拓扑排序理解 面试复习用(第四章)
下一篇:算法C++ 邻接表STL实现(第四章)

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月29日 07时31分17秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章