示例#1
0
 public void dijkstra() {
   PHeap<Vertex> heap =
       new PHeap<>(
           vs.length,
           new Comparator<Vertex>() {
             @Override
             public int compare(Vertex v1, Vertex v2) {
               if (v1.dist == -1 && v2.dist == -1) return 0;
               else if (v1.dist == -1) return 1;
               else if (v2.dist == -1) return -1;
               else return v1.dist - v2.dist;
             }
           });
   for (Vertex v : vs) heap.offer(v);
   while (heap.size() > 0) {
     // System.out.println(heap.toString());
     Vertex start = heap.poll();
     if (start.dist == -1) break;
     // System.out.println(start);
     // System.out.println(heap);
     Edge e = start.edges;
     while (e != null) {
       // System.out.println(e);
       Vertex v = e.dest;
       if (v.dist == -1 || v.dist > start.dist + e.weight) {
         v.dist = start.dist + e.weight;
         v.pred = start;
         // heap.offer(v);
       }
       e = e.next;
     }
     heap.heapify();
   }
 }
示例#2
0
 public void dfs() {
   int time = 0;
   PHeap<Vertex> heap =
       new PHeap<>(
           vs.length,
           new Comparator<Vertex>() {
             @Override
             public int compare(Vertex v1, Vertex v2) {
               return v2.ft - v1.ft;
             }
           });
   for (Vertex v : vs) heap.offer(v);
   while (heap.size() > 0) {
     Vertex v = heap.poll();
     if (v.color == Color.WHILTE) time = dfsVisit(v, time);
   }
 }