图算法之拓扑排序

  1. /**
  2.  * 
  3.  */
  4. package com.eshore.sweetop.mapbase;
  5. import java.awt.Color;
  6. import java.util.LinkedList;
  7. /**
  8.  * Class TopoLogical
  9.  * @author wudongdong
  10.  * TopoLogical.java    
  11.  * Dec 5, 2008
  12.  */
  13. public class TopoLogical {
  14.     private static int time;
  15.     
  16.     public static LinkedList<Vertex> sort(Graphics g){
  17.         LinkedList<Vertex> list=new LinkedList<Vertex>();
  18.         for (Vertex u : g) {
  19.             u.setColor(Color.WHITE);
  20.             u.setParent(null);
  21.             time=0;
  22.         }
  23.         for (Vertex u : g) {
  24.             if(u.getColor().equals(Color.WHITE)){
  25.                 DFSVist(u,list);
  26.             }
  27.         }
  28.         return list;
  29.     }
  30.     
  31.     private static void DFSVist(Vertex u,LinkedList<Vertex> list) {
  32.         u.setColor(Color.GRAY);
  33.         time++;
  34.         u.setD(time);
  35.         for (Vertex v : u.getList()) {
  36.             if(v.getColor().equals(Color.WHITE)){
  37.                 v.setParent(u);
  38.                 DFSVist(v,list);
  39.             }
  40.         }
  41.         u.setColor(Color.BLACK);
  42.         list.add(0, u);
  43.         time++;
  44.         u.setF(time);
  45.     }
  46.     
  47.     public static void main(String[] args) {
  48.         Vertex s1 = new Vertex(1);
  49.         Vertex s2 = new Vertex(2);
  50.         Vertex s3 = new Vertex(3);
  51.         Vertex s4 = new Vertex(4);
  52.         Vertex s5 = new Vertex(5);
  53.         s1.getList().add(s2);
  54.         s1.getList().add(s5);
  55.         s2.getList().add(s1);
  56.         s2.getList().add(s3);
  57.         s2.getList().add(s4);
  58.         s2.getList().add(s5);
  59.         s3.getList().add(s2);
  60.         s3.getList().add(s4);
  61.         s4.getList().add(s2);
  62.         s4.getList().add(s5);
  63.         s4.getList().add(s3);
  64.         s5.getList().add(s4);
  65.         s5.getList().add(s1);
  66.         s5.getList().add(s2);
  67.         Graphics g = new Graphics(s1, s2, s3, s4, s5);
  68.         LinkedList<Vertex> list=TopoLogical.sort(g);
  69.         for (Vertex v : list) {
  70.             System.out.println(v.getId()+":"+v.getF());
  71.         }
  72.     }
  73. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值