算法起步之广度优先搜索
2014-02-23 15:37
281 查看
原文:
算法起步之广度优先搜索
广度优先搜索算法是图的基本算法之一,图是用来保存过对多的关系的数据结构,相对于树一对多的关系更为复杂,所以难度也会比树结构难一点,图的存储一般有连接表表示跟链接矩阵表示,相比来说链接矩阵的方式更为常用,也就是用数组来存储。而广度优先搜索算法其实就是图的遍历过程,数组的遍历大家都会,数组的遍历我们是按照下标的顺序来遍历的,而图的遍历也有自己的方式,图是多对多的关系,我们可以按照各个节点直接的关联关系来遍历他们,这样便衍生出来深度优先跟广度优先,广度优先是先访问与跟当前节点相关联的所有节点,而深度优先则是按照关联关系一层层的遍历。如下图:
广度优先搜索我们需要借助一个队列,我们可以自己写一个队列,也可以借助linkedlist。
友情提示:转载请注明出处【作者:idlear 博客:http://blog.csdn.net/idlear】
算法起步之广度优先搜索
广度优先搜索算法是图的基本算法之一,图是用来保存过对多的关系的数据结构,相对于树一对多的关系更为复杂,所以难度也会比树结构难一点,图的存储一般有连接表表示跟链接矩阵表示,相比来说链接矩阵的方式更为常用,也就是用数组来存储。而广度优先搜索算法其实就是图的遍历过程,数组的遍历大家都会,数组的遍历我们是按照下标的顺序来遍历的,而图的遍历也有自己的方式,图是多对多的关系,我们可以按照各个节点直接的关联关系来遍历他们,这样便衍生出来深度优先跟广度优先,广度优先是先访问与跟当前节点相关联的所有节点,而深度优先则是按照关联关系一层层的遍历。如下图:
广度优先搜索我们需要借助一个队列,我们可以自己写一个队列,也可以借助linkedlist。
public class BFS { private LinkedList list=new LinkedList(); public void BFS(int[][] map){ boolean[] visited=new boolean[map.length]; for (int i = 0; i < visited.length; i++) { if (!visited[i]) { list.addLast(i); while (!list.isEmpty()) { //访问队列里面的第一个节点 int now=(Integer) list.removeFirst(); visited[now]=true; // 将与该节点关联的且没有访问的节点加入到队列中。 for (int j = 0; j < visited.length; j++) { if (map[now][j]==1&&!visited[j]) { list.addLast(j); } } } } } } }
友情提示:转载请注明出处【作者:idlear 博客:http://blog.csdn.net/idlear】
相关文章推荐
- 机试算法讲解: 第41题 广度优先搜索之迷宫问题
- 一步一步复习数据结构和算法基础-广度优先搜索
- 【算法入门】广度/宽度优先搜索(DFS)
- 【算法小总结】广度优先搜索剖析
- 图的搜索算法之广度优先搜索
- 【算法入门】广度/宽度优先搜索(BFS)
- 机试算法讲解: 第42题 广度优先搜索之我该如何倒可乐
- 【算法入门】广度/宽度优先搜索(BFS)
- 算法—12.广度优先搜索
- C++广度优先搜索算法之Dungeon Master
- 算法导论22.2广度优先搜索 练习总结
- 图算法之广度优先搜索
- [ 算法 ]广度优先搜索!
- 从Cheney算法->广度优先搜索->倒酒问题(JAVA实现)
- 基本图算法之广度优先搜索
- 算法导论滴2章图的基本算法--广度优先搜索
- 【数据结构】算法7.6 广度优先搜索
- 【经典算法】:图的深度优先搜索与广度优先搜索的实现
- 【算法入门】广度/宽度优先搜索(BFS)
- 小游戏系列算法之五广度优先搜索,双向广搜,八数码,华容道