topological sort

Posted on 2017-07-10 21:34  Wujunde  阅读(129)  评论(0编辑  收藏  举报

A topological sort
of a dag G  is a linear ordering of all its vertices such that if G contains an
edge(u,v) then u appears before  in the ordering. (If the graph contains a cycle,
then no linear ordering is possible.)

  1 package element_graph;
  2 
  3 import java.util.LinkedList;
  4 
  5 
  6 
  7 
  8 
  9 
 10 
 11 public class deapth_first_search {
 12     public static int time = 0;
 13     private static class vertex{
 14         private LinkedList<vertex> link;
 15         private String name;
 16         private String color;
 17         private vertex p;
 18         private int d,f;
 19         public vertex(String na,LinkedList<vertex> lin){
 20             name = na;
 21             link = lin;
 22             color = "white";
 23             p = null;
 24             d = 0;   //discover time
 25             f = 0;
 26         }
 27     }
 28     public static void DFS(vertex v){
 29         if(v.color == "white"){
 30             time = time + 1;
 31             v.d = time;   //discover time
 32             v.color = "gray";
 33             for (vertex u : v.link) {
 34                 if(u.color == "white"){
 35                     u.p = v;
 36                     DFS(u);
 37                 }
 38             }
 39             v.color = "black";
 40             time = time +1;
 41             v.f = time;
 42             System.out.println(v.name+v.f);
 43         }
 44     }
 45     public static void printpath(vertex s,vertex v){
 46         if(v == s){
 47             System.out.println(s.name);
 48         }
 49         else if(v.p == null){  //will not get s 
 50             System.out.println("no way");
 51         }
 52         else{
 53             printpath(s,v.p);
 54             System.out.println(v.name+v.f);
 55         }
 56     }
 57      public static void main(String[] args) {
 58             LinkedList<vertex> sl = new LinkedList<vertex>();
 59         
 60             LinkedList<vertex> rl = new LinkedList<vertex>();
 61             
 62             LinkedList<vertex> vl = new LinkedList<vertex>();
 63             
 64             LinkedList<vertex> wl = new LinkedList<vertex>();
 65             
 66             LinkedList<vertex> tl = new LinkedList<vertex>();
 67             
 68             LinkedList<vertex> xl = new LinkedList<vertex>();
 69             
 70             LinkedList<vertex> ul = new LinkedList<vertex>();
 71             
 72             LinkedList<vertex> yl = new LinkedList<vertex>();
 73             
 74             vertex sv = new vertex("s",sl);
 75             vertex rv = new vertex("r",rl);
 76             vertex vv = new vertex("v",vl);
 77             vertex wv = new vertex("w",wl);
 78             vertex tv = new vertex("t",tl);
 79             vertex xv = new vertex("x",xl);
 80             vertex uv = new vertex("u",ul);
 81             vertex yv = new vertex("y",yl);
 82             sl.add(rv);
 83             sl.add(wv);
 84             //rl.add(sv);
 85             rl.add(vv);
 86             vl.add(rv);
 87             wl.add(xv);
 88             wl.add(tv);
 89             //wl.add(sv);
 90             tl.add(xv);
 91             tl.add(uv);
 92             //tl.add(wv);
 93             //xl.add(tv);
 94             xl.add(uv);
 95             xl.add(yv);
 96             //xl.add(wv);
 97             //xl.add(tv);
 98             //xl.add(xv);
 99             //xl.add(yv);
100             //xl.add(uv);
101             //xl.add(xv);
102              DFS(sv);
103             // printpath(sv,tv);
104             
105         }
106 }