学习广度优先搜索(Queue)

来源:互联网 发布:百战天虫java 编辑:程序博客网 时间:2024/05/23 01:12
package com.itheima.graph;/** *用队列实现广度优先搜索 * @author Linchong * */class GraphNode {int val;//标识当前节点GraphNode next;//方便建立队列GraphNode[] neighbors; //存储相邻节点的信息boolean visited; //标识是否访问public GraphNode(int val) {this.val = val;}public GraphNode(int val, GraphNode[] n) {this.val = val;this.neighbors = n;}public String toString() {return "value:"+this.val;}}class Queue {GraphNode first,last;public void enquque(GraphNode n){if(first == null) {first = n;last = first;}else{last.next = n;last = n;}}public GraphNode dequque() {if(first == null) {return null;}else{GraphNode temp = new GraphNode(first.val,first.neighbors);first = first.next;return temp;}}}public class GrapTest {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,n5};n5.neighbors = new GraphNode[]{n1,n3,n4};breathFirstSearch(n1,5);}private static void breathFirstSearch(GraphNode root, int x) {if(root.val == x) {System.out.println("find :" + x);return;}Queue queue = new Queue();queue.enquque(root);root.visited = true;while(queue.first != null) {GraphNode c = queue.dequque();for(GraphNode n : c.neighbors) {if(!n.visited) {System.out.print(n+ "\t");if(n.val == x) {System.out.println("find:" + n.val);}n.visited = true;queue.enquque(n);}}}}}

原创粉丝点击