JAVA实现广度搜索&深度搜素
来源:互联网 发布:java redis是什么 编辑:程序博客网 时间:2024/06/05 05:19
水两篇数据结构的内容~ ,这几天做了几道算法题。在ACM POJ上广度搜索深度搜素都是比较基础的算法,所以不针对具体的题目了。
先上JAVA版本的广度搜索核心代码:
//假设需要使用一个数组坐标系来实现,定义一个坐标类public static class Point { int x,y; public Point(int x,int y) { this.x = x; this.y = y; }
在这里假设了使用数组,根据数组坐标搜索的场景,如果有其他需要更多信息的场景,可以在类中加入更多内容,比如:
public static class Point { int x,y,content; public Point(int x,int y) { this.x = x; this.y = y; this.content = content }
接下来就是广度搜索的核心代码
定义一个上下左右四方向数组static int[][] dir = {{0,1},{0,-1},{1,0},{-1,0}};//初始化一个队列Queue<Point> q = new LinkedList<Point>();//start,end 是搜索的起始点,定义为一个point加入到队列中q.add(new Point(start,end));//使用队列是否为空作为判定条件,进行循环直到队列为空。while(!q.isEmpty()) {//使用q.poll()把队列的头pop出来,利用它的坐标寻找下一个符合条件的点 Point top = q.poll(); int x = top.x; int y =top.y; for(k=0;k<4;k++) { Point tmp = new Point(x+dir[k][0],y+dir[k][1]);//safe()判断是否超过边界值,satisfied判断是否满足我们搜索的条件 if(safe(tmp) && satisfied(tmp)) { q.add(tmp) } }}
就这样一个基本的广度搜索就实现了,有时候需要过滤掉已访问过的点可以用一个boolean的数组标记,或者把访问过的点重新赋值使其不满足条件。
JAVA实现深度搜索
//深度搜索有两种方式,一是递归实现,缺点是递归的共性即数据量大的时候会超时超内存,适用于小数据量的。二是使用数组模拟堆栈进行递归。与广度扩散式的搜索不同,深度是不撞南墙不回头一条道走到黑的方式。staitic int[][] dir = {{0,1},{0,-1},{1,0},{-1,0}};dfs(int x, int y) { if(safe(x+dir[0][0],y+dir[0][1])) dfs(x+dir[0][0],y+dir[0][1]); if(safe(x+dir[1][0],y+dir[1][1])) dfs(x+dir[1][0],y+dir[1][1]); if(safe(x+dir[2][0],y+dir[2][1]) dfs(x+dir[2][0],y+dir[2][1]); if(safe(x+dir[3][0],y+dir[3][1])) dfs(x+dir[3][0],y+dir[3][1]);}
为了明显的看出递归的顺序,把它们并列写出来。递归看代码理解不直观,在图上比划一下能明白它的逻辑就容易理解了。
基础算法最重要的就是理解内在的逻辑。
0 0
- JAVA实现广度搜索&深度搜素
- Java实现深度优先搜索和广度优先搜索
- 普通树的广度搜索和深度搜索java实现
- 广度优先搜索与深度优先搜索的 java 实现
- 图的深度、广度优先搜索(JAVA实现)
- javascript实现图的广度优先搜索、深度优先搜素
- 无权图无向图【邻接矩阵存储】深度搜索和广度搜索--Java实现
- 基于图的深度优先搜索和广度优先搜索java实现
- java实现无向图的深度优先搜索和广度优先搜索
- java实现图的深度优先搜索和广度优先搜索
- Java实现数据结构之深度优先搜索DFS和广度优先搜索BFS
- JAVA实现图的深度优先搜索和广度优先搜索
- DFS深度优先搜索算法与BFS广度优先搜索算法的java实现
- <广度优先搜素 BFS>和<深度优先搜索 DFS>
- 深度优先搜索、广度优先搜索的实现
- 深度优先搜索和广度优先搜索的代码实现
- 邻接矩阵实现深度优先搜索,广度优先搜索
- 深度和广度搜索
- 学习android第一天
- Phalcon学习笔记(5)router路由器
- 今天看到个不错的曲面,画一下
- 自制操作系统 第0-4天
- unicode下各种类型转换,CString,string,char*,int,char[]
- JAVA实现广度搜索&深度搜素
- 关于Buffered在ExtJS各版本中变化
- SVN资源同步时的图标含义
- Isomorphic Strings
- Zookeeper 00 安装
- 交你如何快速破解word限制编辑密码!
- C++ 自定义事件机制2
- UML中的关系
- UVA 1605 - Building for UN