广度优先搜索算法(breadth First Search, BFS)
来源:互联网 发布:vue.js 教程 pdf 编辑:程序博客网 时间:2024/05/21 17:15
广度优先( Breadth-First-Search, BFS)
这是一种图形搜索算法,彻底地搜索整张图,直到找到结果为止。
一般的实现里,其邻居节点尚未被检验过的节点会被放置在一个称为open 容器里面,而未检验过的节点则
会被放置在称为closed的容器中,形成张open-closed表。
算法描述如下:
1. 将顶点入队列
2.当队列为非空时,继续执行,否则算法结束
a. 出队列取得队列头顶点V;访问并标记为已访问
b.查找顶点V的第一个邻接顶点W
c.若V的邻接顶点W未被访问过的,则W入队列
d.继续查找顶点V的另一个新的邻接顶点W,转到步骤2。
设置两个链表
closedList 存放已经访问过的节点
openList 存放即将访问的节点
广度优先算法可以总结为,按层次来遍历的,先是根节点,然后是第二层子节点,依次是第三层子节点,将节点分别放入队列中,每次从队列中探出首元素,遍历后的点放入closed表中,还未遍历的店放入open表中,当open表为空时,则整个数遍历完全。
实现的代码如下:
import java.util.Iterator;import java.util.LinkedList;import java.util.List;public class breadthFirstSearch {public static class Node{List neighbors;Node pathParent;String name;public Node(String name){this.name = name;neighbors = new LinkedList();}public String toString(){return name;}}public static void main(String[] args){Node nodeA = new Node("A");Node nodeB = new Node("B");Node nodeC = new Node("C");Node nodeD = new Node("D");Node nodeE = new Node("E");Node nodeF = new Node("F");Node nodeG = new Node("G");Node nodeH = new Node("H");/* * Construct Trees */nodeA.neighbors.add(nodeC);nodeA.neighbors.add(nodeD);nodeA.neighbors.add(nodeE);nodeB.neighbors.add(nodeE);nodeC.neighbors.add(nodeA);nodeC.neighbors.add(nodeD);nodeC.neighbors.add(nodeF);nodeD.neighbors.add(nodeA);nodeD.neighbors.add(nodeC);nodeE.neighbors.add(nodeA);nodeE.neighbors.add(nodeB);nodeE.neighbors.add(nodeG);nodeF.neighbors.add(nodeC);nodeF.neighbors.add(nodeH);nodeG.neighbors.add(nodeE);nodeH.neighbors.add(nodeC);nodeH.neighbors.add(nodeF);breadthFirstSearch bfs = new breadthFirstSearch();System.out.println("From A to B:" + bfs.search(nodeA,nodeF));}public List search(Node startNode,Node goalNode){LinkedList closedList = new LinkedList();LinkedList openList = new LinkedList();openList.add(startNode);startNode.pathParent = null;while(!openList.isEmpty()){Node node = (Node)openList.removeFirst();if(node == goalNode){//return constructPath(goalNode);//路径就是closed表中的顺序return constructPath(closedList);}else{closedList.add(node);Iterator i = node.neighbors.iterator();while(i.hasNext()){Node neighborNode = (Node)i.next();if(!closedList.contains(neighborNode) &&!openList.contains(neighborNode)){neighborNode.pathParent = node;openList.add(neighborNode);}}}}return null;}public List constructPath(LinkedList list){//LinkedList path = new LinkedList();System.out.println("广度优先路径:" + list.toString());//while(node.pathParent != null){//path.addFirst(node);//node = node.pathParent;//}return list;}}
- 广度优先搜索算法(Breadth-First-Search,BFS)
- 广度优先搜索算法(breadth First Search, BFS)
- [数据结构]广度优先搜索算法(Breadth-First-Search,BFS)
- 广度优先搜索(Breadth First Search,BFS)
- 图搜索算法之广度优先搜索(Breadth First Search,BFS)
- BFS—— Breadth First Search 广度优先算法
- BFS——广度优先算法(Breadth First Search)
- 广度优先搜索算法(Breadth-First-Search)
- 广度优先搜索(Breadth first search)
- LeetCode上Tag为广度优先搜索BFS(Breadth-first Search)的题目整理
- 图的广度优先搜索(Breadth First Search)
- 图的遍历之广度优先搜索(Breadth First Search)
- 算法:图的广度优先遍历(Breadth First Search)
- BFS-宽度优先搜索(Breadth First Search)—1
- BFS(Breadth First Search)
- 广度优先搜索算法(BFS,Broad First Search)的PHP实现
- 一道题弄懂宽度优先搜索 Breadth first search
- Tree-BFS(Breadth-First-Search)
- apk破解工具介绍与使用
- UVa:10369 Arctic Network
- MERGE INTO 解决数据入库前的去重
- springMVC+dwr3 实现精确推送信息(2种方法)
- QTP11不能识别.NET对象的解决办法
- 广度优先搜索算法(breadth First Search, BFS)
- 1.6 基础知识——GP2.5 培训(Training)
- php设置上传图片的大小
- 天地水火雷风山泽 乾坤坎离震巽艮兑
- LA - 4513 - Stammering Aliens(Hash + 二分)
- php裁剪图片大小
- Spring3 MVC 例子
- 字符串数组初始化0 与memset 0 效率的分析
- 剖析:现在有100个标记过的电灯泡。第一个人经过这些灯时,点亮所有的灯,第二个人经过时每隔一盏灯就切换开关,第三个人经过时每隔两盏灯切换开关一次。请问,当第100个人经过时,还剩多少盏亮着的灯?