您的位置:首页 > 编程语言 > Java开发

java 实现图的宽度优先遍历

2016-03-14 17:18 459 查看
与Graph相关的问题主要集中在深度优先搜索和宽度优先搜索。深度优先搜索非常简单,你可以从根节点开始循环整个邻居节点。下面是一个非常简单的宽度优先搜索例子,核心是用队列去存储节点。



代码如下:

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);
}
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: