无向图的Depth-first search和Breadth-first Search
public class DepthFirstPath{private boolean[] marked;//edgeTo数组,用于记录路径信息。private int[] edgeTo;private final int s;public DepthFirstPath(Graph G, int s){this.s = s;//初始化marked以及edgeTo数组,长度就是G图内vertex的个数。marked = new boolean[G.V()];edgeTo = new int[G.V()];dfs(G, s);}private void dfs(Graph G, int v){marked[v] = true;for(int w : G.adj(v))if(!marked[w]){//这个便是dfs的顺便操作,在遍历相关vertex的同时,//顺便操作了edgeTo数组。edgeTo[w] = v;dfs(w);}}public boolean hasPath(int v)//未被标记(marked值为false),说明该vertex跟s不相连,自然没有path。{ return marked[v]; }public Iterable path(int v){if(!hasPath(v)) return null;Stack<Integer> path = new Stack<>();for(int x = v; x != s; x = edgeTo[x])//路径信息提取出来,保存到stack里面。path.push(x);path.push(s);return path;}
}
public class BreadthFirstPaths
{private int[] edgeTo;private boolean[] marked[];private int s;public BreadthFirstPaths(Graph G, int s){maeked = new boolean[G.V()];edgeTo = new int[G.V()];this.s = s;bfs(s);}private void bsf(Graph G, int s){marked[s] = true;Queue<Integer> queue = new Queue<>();queue.enqueue(s);while(!queue.isEmpty()){int v = queue.dequeue();for(int w : G.adj())if(!marked[w]){queue.enqueue(w);edgeTo[w] = v;marked[w] = true;} }}public boolean hasPathTo(int v) { return marked[v]; } public Iterable<Integer> pathTo(int v) { if(!hasPathTo(v)) return null; Stack<Integer> path = new Stack<>(); for(int x = v; x != s; x = edgeTo[v]) path.push(x); path.push(s); return path; }
}
public class CC
{//ID数组代替edgeTo数组,相连接的vertex的ID值一致。private int[] ID;private boolean[] marked;private int count;public CC(Graph G){ID = new int[G.V()];marked = new boolean[G.V()];for(int s = 0; s < G.V(); s++)if(!marked[s]){dfs(G, s);count++;}}private void dfs(Graph G, int v){marked[v] = true;ID[v] = count;for(int w : G.adj[v])if(!marked[w]){ dfs(w);}}//判断两个vertex是否相连,就是看它们的ID是否一致。public boolean connected(int v, int w){ return ID[v] == ID[w]; }
}
无向图的Depth-first search和Breadth-first Search相关推荐
- DFS(Depth First Search,深度优先搜索)与BFS(Breadth First Search,广度优先搜索)总结与思考
目录 Depth First Search(dfs) 代码(递归) 代码(非递归) Breadth First Search(bfs) 代码 比较 数据结构 时间复杂度 使用 例题:岛的个数 dfs实 ...
- 数据结构与算法(python):广度优先搜索(Breadth First Search,BFS)和深度优先算法(Depth First Search,DFS)
参考自 MOOC数据结构与算法Python版 目录 一.广度优先搜索 1.1 BFS算法过程 1.2 广度优先搜索算法分析 二.深度优先搜索 2.1 骑士周游 2.1.1 问题定义 2.1.2 构建骑 ...
- 树上的BFS(Tree Breadth First Search)
Pattern: Tree Breadth First Search,树上的BFS 介绍来自链接:https://www.zhihu.com/question/36738189/answer/9086 ...
- JavaScript实现breadth First Search广度优先搜索算法(附完整源码))
JavaScript实现breadth First Search广度优先搜索算法(附完整源码) LinkedListNode.js完整源代码 Comparator.js完整源代码 LinkedList ...
- C++Breadth First Search 广度优先搜索(附完整源码)
C++Breadth First Search 广度优先搜索的实现 C++Breadth First Search 广度优先搜索实现完整源码(定义,实现,main函数测试) C++Breadth Fi ...
- php字符串search,js获取location.search每个查询字符串的值
形如https://www.debug.org/temp/test2.html?a=1&b=2#ddd这样的链接,虽可通过location.search属性获取到问号后的所有查询字符串值,但要 ...
- 04-树7. Search in a Binary Search Tree (25)
04-树7. Search in a Binary Search Tree (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 ...
- pat04-树7. Search in a Binary Search Tree (25)
04-树7. Search in a Binary Search Tree (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 ...
- python search用法,Python-re中search()函数的用法详解(查找ip)
1.首先来看一下search()和find()的区别 import re s1 = "2221155" #search 字符串第一次出现的位置 print(re.search(&q ...
- 深度优先搜索(Depth First Search)、广度优先搜索(Breadth First Search)
DFS: /* 邻接表存储的图 - DFS */void Visit( Vertex V ) {printf("正在访问顶点%d\n", V); }/* Visited[]为全局变 ...
最新文章
- Node.js链式回调
- 【Groovy】编译时元编程 ( 编译时方法注入 | 使用 buildFromSpec、buildFromString、buildFromCode 进行方法注入 )
- leetcode217. 存在重复元素(vip题)超简单
- 怎样通过vb设置透视表多项选择_四个操作带你玩转数据透视表,秒杀Excel函数,提升你的工作效率...
- presentViewController 后调用pushViewController 无效解决方案
- Adobe Flex初记
- java生存pdf资料
- zigbee协议栈 任务、事件与轮询机制
- 玩吧公司,入职后的真实感受
- 行政区划代码2020(SQL)--(下)
- 惠民工程(最小生成树)
- 乳腺仿体breast phantom的MATLAB实现及探讨
- 反超7-11!中国新的“便利店之王”即将诞生!
- 替换Avada主题的Google字体
- 2020Java就业前景好吗?
- python-selenium使用 chrome chromedrive版本问题
- SOAP XML报文解析
- 调用API接口登录后,获取用户信息保存到Vuex中并渲染到Vue页面
- 华为无线WLAN技术(直连式组网实验)
- 第2节 物理层基本概念及PacketTracer仿真
热门文章
- 百度App iOS工程化实践: EasyBox破冰之旅
- 数据分析模型-(RFM,5W2H,AARRR,PEST,4P)
- Ajax上传文件的cache、processdata、contentType属性以及FormData对象的总结
- python预测糖尿病_使用决策树与随机深林预测糖尿病(python)
- 4.Python复杂数据类型之字典
- java 中showinfo方法,jmockito模拟方法中参数如何指定
- nlp中文本相似度匹配
- iPhone 隐私新规下的“大地震”:四大平台损失近百亿美元,“连用户是男是女都分不清!”...
- 在bing中保存自己的搜索关键字.
- CentOS7/8安装jq教程