- package com.eshore.sweetop.mapbase;
- import java.awt.Color;
- import java.util.LinkedList;
- public class SCCTest {
- private static int time;
- public static void DFS(Graphics g,LinkedList<Vertex> list) {
- for (Vertex u : g) {
- u.setColor(Color.WHITE);
- u.setParent(null);
- time = 0;
- }
- while (list.peek() != null) {
- Vertex u=list.peek();
- if (u.getColor().equals(Color.WHITE)) {
- DFSVist(u,list);
- System.out.println();
- }
- }
- }
- private static void DFSVist(Vertex u,LinkedList<Vertex> list) {
- u.setColor(Color.GRAY);
- time++;
- u.setD(time);
- for (Vertex v : u.getList()) {
- if (v.getColor().equals(Color.WHITE)) {
- v.setParent(u);
- DFSVist(v,list);
- }
- }
- System.out.print(u.getId());
- u.setColor(Color.BLACK);
- list.poll();
- time++;
- u.setF(time);
- }
- public static void SCC(Graphics g) {
- LinkedList<Vertex> list = TopoLogical.sort(g);
- rev(g);
- DFS(g,list);
- }
- public static void main(String[] args) {
- Vertex s1 = new Vertex(1);
- Vertex s2 = new Vertex(2);
- Vertex s3 = new Vertex(3);
- Vertex s4 = new Vertex(4);
- Vertex s5 = new Vertex(5);
- Vertex s6 = new Vertex(6);
- s1.getList().add(s2);
- s1.getList().add(s4);
- s2.getList().add(s5);
- s3.getList().add(s6);
- s3.getList().add(s5);
- s4.getList().add(s2);
- s5.getList().add(s4);
- s6.getList().add(s6);
- Graphics g = new Graphics(s1, s2, s3, s4, s5, s6);
- SCC(g);
- }
- public static void rev(Graphics g) {
- int[] count = new int[g.size()];
- for (int i = 0; i < count.length; i++) {
- count[i] = g.get(i).getList().size();
- }
- for (int i = 0; i < count.length; i++) {
- Vertex v = g.get(i);
- for (int j = 0; j < count[i]; j++) {
- Vertex u = v.getList().get(j);
- u.getList().add(v);
- }
- }
- for (int i = 0; i < count.length; i++) {
- Vertex v = g.get(i);
- for (int j = 0; j < count[i]; j++) {
- v.getList().remove(0);
- }
- }
- }
- }
图算法之强连通分支
最新推荐文章于 2021-02-26 16:06:01 发布