图算法之强连通分支

  1. packagecom.eshore.sweetop.mapbase;
  2. importjava.awt.Color;
  3. importjava.util.LinkedList;
  4. publicclassSCCTest{
  5. privatestaticinttime;
  6. publicstaticvoidDFS(Graphicsg,LinkedList<Vertex>list){
  7. for(Vertexu:g){
  8. u.setColor(Color.WHITE);
  9. u.setParent(null);
  10. time=0;
  11. }
  12. while(list.peek()!=null){
  13. Vertexu=list.peek();
  14. if(u.getColor().equals(Color.WHITE)){
  15. DFSVist(u,list);
  16. System.out.println();
  17. }
  18. }
  19. }
  20. privatestaticvoidDFSVist(Vertexu,LinkedList<Vertex>list){
  21. u.setColor(Color.GRAY);
  22. time++;
  23. u.setD(time);
  24. for(Vertexv:u.getList()){
  25. if(v.getColor().equals(Color.WHITE)){
  26. v.setParent(u);
  27. DFSVist(v,list);
  28. }
  29. }
  30. System.out.print(u.getId());
  31. u.setColor(Color.BLACK);
  32. list.poll();
  33. time++;
  34. u.setF(time);
  35. }
  36. publicstaticvoidSCC(Graphicsg){
  37. LinkedList<Vertex>list=TopoLogical.sort(g);
  38. rev(g);
  39. DFS(g,list);
  40. }
  41. publicstaticvoidmain(String[]args){
  42. Vertexs1=newVertex(1);
  43. Vertexs2=newVertex(2);
  44. Vertexs3=newVertex(3);
  45. Vertexs4=newVertex(4);
  46. Vertexs5=newVertex(5);
  47. Vertexs6=newVertex(6);
  48. s1.getList().add(s2);
  49. s1.getList().add(s4);
  50. s2.getList().add(s5);
  51. s3.getList().add(s6);
  52. s3.getList().add(s5);
  53. s4.getList().add(s2);
  54. s5.getList().add(s4);
  55. s6.getList().add(s6);
  56. Graphicsg=newGraphics(s1,s2,s3,s4,s5,s6);
  57. SCC(g);
  58. }
  59. publicstaticvoidrev(Graphicsg){
  60. int[]count=newint[g.size()];
  61. for(inti=0;i<count.length;i++){
  62. count[i]=g.get(i).getList().size();
  63. }
  64. for(inti=0;i<count.length;i++){
  65. Vertexv=g.get(i);
  66. for(intj=0;j<count[i];j++){
  67. Vertexu=v.getList().get(j);
  68. u.getList().add(v);
  69. }
  70. }
  71. for(inti=0;i<count.length;i++){
  72. Vertexv=g.get(i);
  73. for(intj=0;j<count[i];j++){
  74. v.getList().remove(0);
  75. }
  76. }
  77. }
  78. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值