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