单源最短路径(三)————Dag实现

来源:互联网 发布:机械设计仿真软件 编辑:程序博客网 时间:2024/05/22 01:56
  1. package om.eshore.sweetop.minpath;
  2. import java.awt.Color;
  3. import java.util.LinkedList;
  4. public class Dag extends Graphics {
  5.     private int time = 0;
  6.     public Dag(Vertex... vs) {
  7.         for (Vertex v : vs) {
  8.             list.add(v);
  9.         }
  10.     }
  11.     public void sort() {
  12.         LinkedList<Vertex> list = new LinkedList<Vertex>();
  13.         for (Vertex u : this.list) {
  14.             u.setColor(Color.WHITE);
  15.             // u.setParent(null);
  16.         }
  17.         time = 0;
  18.         for (Vertex u : this.list) {
  19.             if (u.getColor().equals(Color.WHITE)) {
  20.                 DFSVist(u, list);
  21.             }
  22.         }
  23.         this.list = list;
  24.     }
  25.     private void DFSVist(Vertex u, LinkedList<Vertex> list) {
  26.         u.setColor(Color.GRAY);
  27.         // time++;
  28.         // u.setDepth(time);
  29.         for (Vertex v : u.getV()) {
  30.             if (v.getColor().equals(Color.WHITE)) {
  31.                 // v.setParent(u);
  32.                 DFSVist(v, list);
  33.             }
  34.         }
  35.         u.setColor(Color.BLACK);
  36.         list.add(0, u);
  37.         // time++;
  38.         // u.setF(time);
  39.     }
  40.     public boolean minPath(Vertex v) {
  41.         sort();
  42.         initSingleSource(v);
  43.         boolean start = false;
  44.         for (Vertex u : list) {
  45.             if (u == v) {
  46.                 start = true;
  47.             }
  48.             if (start) {
  49.                 for (Vertex x : u.getV()) {
  50.                     relax(u, x);
  51.                 }
  52.             }
  53.         }
  54.         return true;
  55.     }
  56. }
原创粉丝点击