- packagecom.eshore.sweetop.mapbase;
- importjava.awt.Color;
- importjava.util.LinkedList;
- publicclassSCCTest{
- privatestaticinttime;
- publicstaticvoidDFS(Graphicsg,LinkedList<Vertex>list){
- for(Vertexu:g){
- u.setColor(Color.WHITE);
- u.setParent(null);
- time=0;
- }
- while(list.peek()!=null){
- Vertexu=list.peek();
- if(u.getColor().equals(Color.WHITE)){
- DFSVist(u,list);
- System.out.println();
- }
- }
- }
- privatestaticvoidDFSVist(Vertexu,LinkedList<Vertex>list){
- u.setColor(Color.GRAY);
- time++;
- u.setD(time);
- for(Vertexv: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);
- }
- publicstaticvoidSCC(Graphicsg){
- LinkedList<Vertex>list=TopoLogical.sort(g);
- rev(g);
- DFS(g,list);
- }
- publicstaticvoidmain(String[]args){
- Vertexs1=newVertex(1);
- Vertexs2=newVertex(2);
- Vertexs3=newVertex(3);
- Vertexs4=newVertex(4);
- Vertexs5=newVertex(5);
- Vertexs6=newVertex(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);
- Graphicsg=newGraphics(s1,s2,s3,s4,s5,s6);
- SCC(g);
- }
- publicstaticvoidrev(Graphicsg){
- int[]count=newint[g.size()];
- for(inti=0;i<count.length;i++){
- count[i]=g.get(i).getList().size();
- }
- for(inti=0;i<count.length;i++){
- Vertexv=g.get(i);
- for(intj=0;j<count[i];j++){
- Vertexu=v.getList().get(j);
- u.getList().add(v);
- }
- }
- for(inti=0;i<count.length;i++){
- Vertexv=g.get(i);
- for(intj=0;j<count[i];j++){
- v.getList().remove(0);
- }
- }
- }
- }
图算法之强连通分支
最新推荐文章于 2022-05-29 11:25:04 发布