寻路问题

在图上如何寻找从1到8的路径
一种策略:只要能发现没走过的点,就走到它。有多个点可走就随便挑一个,如果无路可走就回退,再看看有没有走过的点可走
在图上如何寻找从1到8的路径
运气最好:1->2->4->8
运气稍差:1->2->4->5->6->8
运气坏:1->3->7->9=>7->A=>7=>3->5->6->8(双向箭头表示回退)

不连通的图,无法从结点1走到结点8

完整的尝试过程可能如下
1->2->4->3->7=>3=>4=>2->9=>2=>1
结论:不存在从1到8的路径
得出这个结论之前,一定会把从1出发能走到的点全部走过。
(在走的过程中,我们需要记住某一点已经被走过)
从起点出发,走过的点要做标记,发现有没走过的点,就随意挑一个往前走,走不了就回退,此种路径搜索策略就被称为深度优先搜索,简称深搜
其实称为远度优先搜索更容易理解一些,因为这种搜索策略能往前走一步就往前走一步,总是试图走的更远,所谓远近(或深度),就是以距离起点的步数来衡量的。

在图上寻找路径

int main(){将所有点都标记为新店;起点=1终点=8cout<<dfs(起点);
}
//判断从V出发能否走到终点
bool dfs(v){if(v为终点)return true;if(v为旧点)return false;将v标记为旧点对和v相邻的每个结点U{if(dfs(U)==true){return true;
}
}
return false;
}

判断从V出发是否能够走到终点,如果能,要记录路径

Node path[MAX_LEN];      //MAX_LEN取结点总数即可
int depth;                  //从起点走到它,走的深度,起点深度为0
//从起点出发,寻找到终点的路径, 并且在这过程中,要把走过的路径给记下来
bool dfs(V){if(V为终点){path[depth]=v;            //记录到路径中去return true;
}
if(V为旧点)return false;
将v标记为旧点;
path[depth]=v;             //没有走,就走这个点
++depth;
对和v相邻的每个结点U{if(dfs(U)==true){         //从u出发能不能到达终点return true;
}
//如果把和v相邻的每个顶点都试过了也无法走到终点,v就不应该出现在从起点到终点的路径上面。相当于回退,退到v的父节点上面
--depth;
return false;
}}
int main(){将所有点都标记为新点;depth=0;
//从起点到终点找路,如果找到了路,还得把路记下来,如果起点返回值为true,//说明我们已经找到了从起点到终点的路,并且这条路已经被记录在path数组
//里面了,这条路上面的结点数是由depth来记录的if(dfs(起点)){for(int i=0;i<=depth;++i){cout<<path[i]<<endl;
}
}
}


1->3->7->9=>7->A=>7=>3->5->6->8
分析过程:走1379,回退到7,把9给弹出去,走到A,又把A放进去了。然后回退到7,把A弹出去了,然后回退到3,把7弹出去了,然后从3走到5,把5放到path中,然后走到6,6被放到path中,然后再走到8,8被放到path中去了。此时就可以找到路径
path:1,3,5,6,8

遍历图上所有结点

dfs(v){if(v是旧点){return;
}
将v标记为旧点;
对和v相邻的每个点U{dfs(U);
}
}
int main(){将所有点都标记为新点;while(在图中能找到新点k)dfs(k);
}

深度优先搜索之在图上寻找路径相关推荐

  1. Ueditor 自定义多图上传路径及回显

    上传: 多图上传的路径和单图上传的路径一样,设置方法:http://blog.csdn.net/justinytsoft/article/details/52538708 回显: 下图是回显修改的地方 ...

  2. 通过深度优先搜索(DFS)对图的边进行分类

    对于在图G上进行深度优先搜索算法所产生的深度优先森林Gt,我们可以定义四种边的类型: 1.树边(Tree Edge):为深度优先森林中Gt的边.如果结点v是因算法对边(u,v)的搜索而首先被发现,则( ...

  3. 有上下界网络流 ---- P4843 清理雪道(DAG图上最小路径重复边覆盖)【模板】有源汇上下界最小流

    题目链接 题目大意: 解题思路: 首先我们发现对于每条边至少要覆盖一次,最多覆盖无数次 那么就有点像上下界网络流了[1,INF][1,INF][1,INF]的限制关系 跑一边最小流就可以了!! #in ...

  4. 算法:深度优先搜索(一)

    一.在图上寻找路径和遍历 在图上如何寻找从1到8的路径? 不连通的图,无法从节点1走到节点8 从起点出发,走过的点要标记,发现有没有走过的点,就随意挑选一个往前走,走不了就回退,此种路径搜索策略就称为 ...

  5. 图的广度优先搜索(bfs)以及深度优先搜索(dfs)

    1.前言 和树的遍历类似,图的遍历也是从图中某点出发,然后按照某种方法对图中所有顶点进行访问,且仅访问一次. 但是图的遍历相对树而言要更为复杂.因为图中的任意顶点都可能与其他顶点相邻,所以在图的遍历中 ...

  6. 图的广度优先搜索(BFS)和深度优先搜索(DFS)算法解析

    BFS和DFS算法解析 [算法入门] 2018/6/2 1.前言 和树的遍历类似,图的遍历也是从图中某点出发,然后按照某种方法对图中所有顶点进行访问,且仅访问一次. 但是图的遍历相对树而言要更为复杂. ...

  7. 图的遍历——深度优先搜索+广度优先搜索

    一:图的遍历--深度优先搜索 在本文其他内容中只是大体概括了主要的图论内容,更加详细的代码实现及算法分析在此给出. 深度优先搜索(DFS)类似树的先序遍历. 假设初始状态是图中所有顶点未曾被访问,则深 ...

  8. 数据结构学习笔记——图的遍历算法(深度优先搜索和广度优先搜索)

    目录 一.图的遍历概念 二.深度优先搜索(DFS) (一)DFS算法步骤 1.邻接表DFS算法步骤 2.邻接矩阵DFS算法步骤 (二)深度优先生成树.森林 (三)DFS的空间复杂度和时间复杂度 三.广 ...

  9. DFS(深度优先搜索)详解(概念讲解,图片辅助,例题解释,剪枝技巧)

    目录 那年深夏 引入 1.什么是深度优先搜索(DFS)? 2.什么是栈? 3.什么是递归? 图解过程 问题示例 1.全排列问题 2.迷宫问题 3.棋盘问题(N皇后) 4.加法分解 模板 剪枝 1.简介 ...

最新文章

  1. 如何防止我的模型过拟合?这篇文章给出了6大必备方法
  2. php soap webservice 实例
  3. Hexo瞎折腾系列(8) - 添加评论系统
  4. h5 修改title 微信_微信h5网页自定义分享(标题、描述、图标)
  5. jhipster 配置 mysql_java – 将jhipster后端和前端分成两个项目?
  6. JVM源码分析之javaagent原理完全解读
  7. linux下查看隐藏的文件
  8. SPSS学习中涉及的统计知识
  9. python规模大小的指标是_训练数据多少才够用
  10. php比较营业时间,使用php以人类可读格式从数据库表打印餐厅营业时间
  11. 【计算机组成原理】定点乘法运算之原码两位乘法
  12. ASP.NET---母板应用
  13. 传统机器学习和深度神经网络对比
  14. 【行空板教程】手写输入法
  15. linux设置法语键盘布局,法语键盘布局图
  16. gta5因为计算机丢失xinput1,GTA5 运行缺少这个xinput1-3.dll,怎样办
  17. vscode汇编环境配置
  18. 【Fuzzy】隶属度函数和模糊推理
  19. MacTeX的使用心得
  20. 腕象谈表:V6卡地亚山度士后镶满钻评测

热门文章

  1. 传华为将有2万名CNBG员工转岗CBG 回应:该消息不属实
  2. 疑似一加7渲染图曝光:弹出式自拍镜头+高颜值渐变配色
  3. 苹果AirPower总是跳票的原因找到了?或因商标被抢注
  4. 抢注“哔哩哔哩”商标卖成人用品?A站回应:不符合价值观 已申请注销
  5. DTMF采用RFC2833进行带内传输的实现[ZT]
  6. AS出现Error:Cause: peer not authenticated
  7. 【进击大厂之力扣每日打卡】七进制数
  8. Unable to establish loopback connection异常解决
  9. 【FLink】Flink SQL代码生成与UDF重复调用的优化
  10. 95-20-010-协议-Kafka的Request和Response