zoukankan      html  css  js  c++  java
  • Breadth-first search

    given a graph G  and a distinguished source vertex s, breadth-first
    search systematically explores the edges of G to “discover” every vertex that is
    reachable from s.

    To keep track of progress, breadth-first search colors each vertex white, gray, or
    black. All vertices start out white and may later become gray and then black. A
    vertex is discovered the first time it is encountered during the search, at which time
    it becomes nonwhite. Gray and black vertices, therefore, have been discovered, but
    breadth-first search distinguishes between them to ensure that the search proceeds
    in a breadth-first manner

      1 package element_graph;
      2 
      3 
      4 import java.util.Iterator;
      5 import java.util.LinkedList;  
      6 import java.util.List;
      7 
      8 
      9 
     10 import edu.princeton.cs.algs4.Queue;
     11   
     12   
     13 public class breadth_first_search {  
     14     private static class vertex{
     15         private LinkedList<vertex> link;
     16         private String name;
     17         private String color;
     18         private vertex p;
     19         private int d;
     20         public vertex(String na,LinkedList<vertex> lin){
     21             name = na;
     22             link = lin;
     23             color = "white";
     24             p = null;
     25             d = 9999;
     26         }
     27     }
     28     public static void BFS(vertex s){
     29         s.color = "grey";
     30         s.d = 0;
     31         Queue<vertex> q = new Queue<vertex>();
     32         q.enqueue(s);
     33         while(!q.isEmpty()){
     34             vertex u = q.dequeue();
     35             for (vertex v : u.link) {  //every adj
     36                 if(v.color == "white"){
     37                     v.color = "gray";
     38                     v.d = v.d + 1;
     39                     v.p = u;
     40                     q.enqueue(v);
     41                 }
     42             }
     43             u.color = "black";
     44             }
     45         
     46     }
     47     public static void printpath(vertex s,vertex v){
     48         if(v == s){
     49             System.out.println(s.name);
     50         }
     51         else if(v.p == null){  //will not get s 
     52             System.out.println("no way");
     53         }
     54         else{
     55             printpath(s,v.p);
     56             System.out.println(v.name);
     57         }
     58     }
     59     
     60     
     61     
     62     
     63      public static void main(String[] args) {
     64             LinkedList<vertex> sl = new LinkedList<vertex>();
     65         
     66             LinkedList<vertex> rl = new LinkedList<vertex>();
     67             
     68             LinkedList<vertex> vl = new LinkedList<vertex>();
     69             
     70             LinkedList<vertex> wl = new LinkedList<vertex>();
     71             
     72             LinkedList<vertex> tl = new LinkedList<vertex>();
     73             
     74             LinkedList<vertex> xl = new LinkedList<vertex>();
     75             
     76             LinkedList<vertex> ul = new LinkedList<vertex>();
     77             
     78             LinkedList<vertex> yl = new LinkedList<vertex>();
     79             
     80             vertex sv = new vertex("s",sl);
     81             vertex rv = new vertex("r",rl);
     82             vertex vv = new vertex("v",vl);
     83             vertex wv = new vertex("w",wl);
     84             vertex tv = new vertex("t",tl);
     85             vertex xv = new vertex("x",xl);
     86             vertex uv = new vertex("u",ul);
     87             vertex yv = new vertex("y",yl);
     88             sl.add(rv);
     89             sl.add(wv);
     90             rl.add(sv);
     91             rl.add(vv);
     92             vl.add(rv);
     93             wl.add(xv);
     94             wl.add(tv);
     95             wl.add(sv);
     96             tl.add(xv);
     97             tl.add(uv);
     98             tl.add(wv);
     99             xl.add(tv);
    100             xl.add(uv);
    101             xl.add(yv);
    102             xl.add(wv);
    103             xl.add(tv);
    104             xl.add(xv);
    105             xl.add(yv);
    106             xl.add(uv);
    107             xl.add(xv);
    108              BFS(sv);
    109              printpath(sv,tv);
    110             
    111         }
    112 }
    113  
  • 相关阅读:
    第几天
    打印图形
    父类上的注解能被子类继承吗
    [LeetCode] 108. Convert Sorted Array to Binary Search Tree ☆(升序数组转换成一个平衡二叉树)
    探究高可用服务端架构的优秀资料索引
    无序数组的中位数
    [LeetCode] 113. Path Sum II ☆☆☆(二叉树所有路径和等于给定的数)
    [LeetCode] 112. Path Sum ☆(二叉树是否有一条路径的sum等于给定的数)
    翻转单词
    [LeetCode] 110. Balanced Binary Tree ☆(二叉树是否平衡)
  • 原文地址:https://www.cnblogs.com/wujunde/p/7134322.html
Copyright © 2011-2022 走看看