java 实现图的宽度优先遍历
2016-03-14 17:18
459 查看
与Graph相关的问题主要集中在深度优先搜索和宽度优先搜索。深度优先搜索非常简单,你可以从根节点开始循环整个邻居节点。下面是一个非常简单的宽度优先搜索例子,核心是用队列去存储节点。
![](http://img.blog.csdn.net/20160314171536826)
代码如下:
代码如下:
package sort; //第一步,定义一个GraphNode class GraphNode{ int val; GraphNode next; GraphNode[] neighbors; boolean visited; GraphNode(int x){ val = x; } GraphNode(int x,GraphNode[] n){ val = x; neighbors = n; } public String toString(){ return "value:"+this.val; } } //第二步,定义一个队列 class Queue{ GraphNode first,last; public void enqueue(GraphNode n){ if(first == null){ first = n; last = first; }else{ last.next = n; last = n; } } public GraphNode dequeue(){ if(first == null){ return null; }else{ GraphNode temp = new GraphNode(first.val,first.neighbors); first = first.next; return temp; } } } //第三步,使用队列进行宽度优先搜索 public class GraphTest { public static void main(String[] args) { GraphNode n1 = new GraphNode(1); GraphNode n2 = new GraphNode(2); GraphNode n3 = new GraphNode(3); GraphNode n4 = new GraphNode(4); GraphNode n5 = new GraphNode(5); n1.neighbors = new GraphNode[]{n2,n3,n5}; n2.neighbors = new GraphNode[]{n1,n4}; n3.neighbors = new GraphNode[]{n1,n4,n5}; n4.neighbors = new GraphNode[]{n2,n3,n5}; n5.neighbors = new GraphNode[]{n1,n3,n4}; breathFirstSearch(n1,5); } public static void breathFirstSearch(GraphNode root,int x){ if(root.val == x){ System.out.println("find in root"); } Queue queue = new Queue(); root.visited = true; queue.enqueue(root); while(queue.first!=null){ GraphNode c = (GraphNode)queue.dequeue(); for(GraphNode n:c.neighbors){ if(!n.visited){ System.out.println(n+" "); n.visited = true; if(n.val==x){ System.out.println("Find "+n); } queue.enqueue(n); } } } } }
相关文章推荐
- Java RESTful Web Service相关概念
- Reverse Linked List II | Java最短代码实现
- MyEclipse连接MySQL数据库详细步骤
- spring-jar包详解整理(大合集)
- SpringMvc
- Java Calendar 类的时间操作
- 基于注解的 Spring MVC 简单入门
- Spring MVC入门
- Eclipse 反编译插件JadClipse安装
- Java工程师成神之路~
- Java你可能不知道的事(3)HashMap
- Java你可能不知道的事(3)HashMap
- Java你可能不知道的事(3)HashMap
- Java中abstract和interface的区别
- SpringMVC源码总结(二)mvc:annotation
- eclipse IDE 扩展pydev
- java 内存调优
- 谁将会参加比赛的问题(java 实现)
- java并发编程基础之线程安全
- SpringMVC源码总结(一)HandlerMapping和HandlerAdapter入门