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

  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. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值