Advertisement
Guest User

Untitled

a guest
Jun 24th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.85 KB | None | 0 0
  1. #include "stdafx.h"
  2.  
  3. #include "cstdlib"
  4. #include "cctype"
  5. #include "cstring"
  6. #include "cstdio"
  7. #include "cmath"
  8. #include "algorithm"
  9. #include "vector"
  10. #include "string"
  11. #include "iostream"
  12. #include "sstream"
  13. #include "set"
  14. #include "queue"
  15. #include "stack"
  16. #include "fstream"
  17. #include "strstream"
  18. using namespace std;
  19.  
  20. #define  M 2000                  
  21. int STACK[M],top=0;          
  22. bool InStack[M];              
  23. int DFN[M];                  
  24. int Low[M];                  
  25. int ComponetNumber=0;        
  26. int Index=0;                
  27. vector <int> Edge[M];        
  28. vector <int> Component[M];  
  29. void Tarjan(int i)
  30. {
  31.     int j;
  32.     DFN[i]=Low[i]=Index++;
  33.     InStack[i]=true;
  34.     STACK[++top]=i;
  35.     for (int e=0;e<Edge[i].size();e++)
  36.     {
  37.         j=Edge[i][e];
  38.         if (DFN[j]==-1)
  39.         {
  40.             Tarjan(j);
  41.             Low[i]=min(Low[i],Low[j]);
  42.         }
  43.          else if (InStack[j])
  44.             Low[i]=min(Low[i],DFN[j]);
  45.     }
  46.     if (DFN[i]==Low[i])
  47.     {
  48.         cout<<"TT    "<<i<<"   "<<Low[i]<<endl;
  49.         ComponetNumber++;
  50.         do
  51.         {
  52.             j=STACK[top--];
  53.             InStack[j]=false;
  54.             Component[ComponetNumber].push_back(j);
  55.         }
  56.         while (j!=i);
  57.     }
  58. }
  59.  
  60. void solve(int N)      
  61. {
  62.     memset(STACK,-1,sizeof(STACK));
  63.     memset(InStack,0,sizeof(InStack));
  64.     memset(DFN,-1,sizeof(DFN));
  65.     memset(Low,-1,sizeof(Low));
  66.     for(int i=0;i<N;i++)
  67.         if(DFN[i]==-1)
  68.             Tarjan(i);    
  69. }
  70.  
  71.  
  72.  
  73. int _tmain(int argc, _TCHAR* argv[])
  74. {
  75.     Edge[0].push_back(4);Edge[0].push_back(13); Edge[0].push_back(17);
  76.     Edge[1].push_back(14);
  77.     Edge[2].push_back(6);Edge[2].push_back(28);
  78.     Edge[3].push_back(16);
  79.     Edge[4].push_back(10); Edge[4].push_back(17);Edge[4].push_back(36);
  80.     Edge[5].push_back(18); Edge[5].push_back(42);
  81.     Edge[6].push_back(7); Edge[6].push_back(20);
  82.     Edge[7].push_back(2); Edge[7].push_back(19);Edge[7].push_back(21);
  83.     Edge[8].push_back(0); Edge[8].push_back(13);Edge[8].push_back(21);Edge[8].push_back(34);Edge[8].push_back(47);
  84.     Edge[9].push_back(10);Edge[9].push_back(22);
  85.     Edge[10].push_back(23);
  86.     Edge[11].push_back(10);Edge[11].push_back(24);
  87.     Edge[12].push_back(25);Edge[12].push_back(38);Edge[12].push_back(51);
  88.     Edge[13].push_back(0);Edge[13].push_back(16);
  89.     Edge[14].push_back(27);
  90.     Edge[15].push_back(2);Edge[15].push_back(19);
  91.     Edge[16].push_back(3);Edge[16].push_back(31);
  92.     Edge[17].push_back(23);Edge[17].push_back(30);Edge[17].push_back(49);
  93.     Edge[18].push_back(5);
  94.     Edge[19].push_back(20);Edge[19].push_back(33);
  95.     Edge[20].push_back(8);Edge[20].push_back(15);Edge[20].push_back(32);Edge[20].push_back(34);
  96.     Edge[21].push_back(12);Edge[21].push_back(26);Edge[21].push_back(39);
  97.     Edge[22].push_back(5);Edge[22].push_back(9);Edge[22].push_back(23);
  98.     Edge[23].push_back(10);Edge[23].push_back(36);
  99.     Edge[24].push_back(23);Edge[24].push_back(37);
  100.     Edge[25].push_back(3);Edge[25].push_back(8);Edge[25].push_back(16);
  101.     Edge[26].push_back(30);Edge[26].push_back(39);Edge[26].push_back(43);
  102.     Edge[27].push_back(1);Edge[27].push_back(40);
  103.     Edge[28].push_back(32);Edge[28].push_back(54);
  104.     Edge[29].push_back(42);
  105.     Edge[30].push_back(10);Edge[30].push_back(36);Edge[30].push_back(43);
  106.     Edge[31].push_back(35);Edge[31].push_back(44);
  107.     Edge[32].push_back(33);Edge[32].push_back(46);
  108.     Edge[33].push_back(21);Edge[33].push_back(28);Edge[33].push_back(45);Edge[33].push_back(47);
  109.     Edge[34].push_back(12);Edge[34].push_back(39);Edge[34].push_back(52);
  110.     Edge[35].push_back(22);Edge[35].push_back(36);Edge[35].push_back(48);
  111.     Edge[36].push_back(23);Edge[36].push_back(49);
  112.     Edge[37].push_back(36);Edge[37].push_back(40);Edge[37].push_back(50);
  113.     Edge[38].push_back(8);Edge[38].push_back(16);Edge[38].push_back(29);
  114.     Edge[39].push_back(13);Edge[39].push_back(52);
  115.     Edge[40].push_back(27);Edge[40].push_back(53);
  116.     Edge[41].push_back(15);Edge[41].push_back(45);
  117.     Edge[42].push_back(29);Edge[42].push_back(39);
  118.     Edge[43].push_back(4);Edge[43].push_back(23);Edge[43].push_back(49);
  119.     Edge[44].push_back(31);
  120.     Edge[45].push_back(46);Edge[45].push_back(54);
  121.     Edge[46].push_back(34);Edge[46].push_back(41);
  122.     Edge[47].push_back(3);Edge[47].push_back(12);Edge[47].push_back(52);
  123.     Edge[48].push_back(35);Edge[48].push_back(49);
  124.     Edge[49].push_back(36);
  125.     Edge[50].push_back(11);Edge[50].push_back(49);
  126.     Edge[51].push_back(8);Edge[51].push_back(29);Edge[51].push_back(42);
  127.     Edge[52].push_back(26);
  128.     Edge[53].push_back(40);Edge[53].push_back(50);
  129.     Edge[54].push_back(41);
  130.  
  131.     int  N=55;
  132.     solve(N);
  133.     cout<<"ComponetNumber is "<<ComponetNumber<<endl;
  134.     for(int i=0;i<N;i++)
  135.         cout<<Low[i]<<" ";
  136.     cout<<endl;
  137.     for(int i=0;i<N;i++)
  138.     {
  139.         for(int j=0;j<Component[i].size();j++)
  140.             cout<<Component[i][j]+1<<" ";
  141.         cout<<endl;
  142.     }
  143.     return 0;
  144.  
  145. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement