Advertisement
Guest User

Untitled

a guest
Oct 25th, 2014
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.48 KB | None | 0 0
  1.  
  2. #include "stdafx.h"
  3. #include <iostream>
  4.  
  5. void creatematrix(int **p,int n)
  6. {
  7.     for (int i=0; i<n;i++)
  8.     {
  9.         p[i] = new int[n];
  10.     }
  11.  
  12.     //инициализация матрицы смежности
  13.     for (int i=0; i<n; i++)
  14.     {
  15.         for (int j=0; j<n; j++)
  16.         {
  17.             p[i][j] = 0;
  18.         }
  19.     }
  20. }
  21.  
  22. void showmatrix(int **p, int n)
  23. {
  24.     //вывод матрицы смежности
  25.     for (int i=0; i<n; i++)
  26.     {
  27.         for (int j=0; j<n; j++)
  28.             std::cout<<p[i][j]<<"  ";
  29.             std::cout<<std::endl;
  30.  
  31.     }
  32. }
  33.  
  34. void delmatrix(int **p, int n)
  35. {
  36.     for (int i = 0; i < n; i++)
  37.         delete [] p[i];
  38. }
  39.  
  40. void DFS(int **AdjacencyMatrix, int start, bool *visited, int finish,int n,int ccNum, int *cc)
  41. {
  42.  
  43.  
  44.     if (visited[start] != false) return;
  45.    
  46.     visited[start] = true;
  47.  
  48.     if (visited[finish] == true)
  49.     {
  50.         return;
  51.     }
  52.    
  53.     cc[start] = ccNum;
  54.  
  55.     for (int i=0; i<n; i++)
  56.     {
  57.         if ((AdjacencyMatrix[start][i]!=0) && (!visited[i]))
  58.             DFS(AdjacencyMatrix, i, visited, finish, n, ccNum,cc);
  59.     }
  60.  
  61.  
  62. }
  63.  
  64. int FindCCnum(int **AdjacencyMatrix, int start, bool *visited, int finish,int n, int *cc)
  65. {
  66.     int ccNum = 0;
  67.  
  68.      for (int i = 0; i < n; i++) // перебираем вершины
  69.      {
  70.          if (!visited[i]) // если текущая не помечена
  71.          {
  72.              ccNum++; // значит мы нашли компоненту связности
  73.              DFS(AdjacencyMatrix,i,visited,finish,n, ccNum, cc); // запускаем на ней DFS
  74.              
  75.          }
  76.      }
  77.  
  78.     return ccNum;
  79. }
  80.  
  81. int main()
  82. {
  83.     int n,m;
  84.     std::cin>>n>>m;
  85.  
  86.     //матрица смежности nxn
  87.     int **AdjacencyMatrix = new int*[n];
  88.     creatematrix(AdjacencyMatrix,n);
  89.  
  90.     int left, right;
  91.  
  92.     while (m>0)
  93.     {
  94.             std::cin>>left>>right;
  95.             AdjacencyMatrix[left-1][right-1] = 1;
  96.             AdjacencyMatrix[right-1][left-1] = 1;
  97.     m--;
  98.     }
  99.  
  100.     int start;
  101.     int finish;
  102.  
  103.     //std::cin>>start>>finish;
  104.  
  105.     bool *visited = new bool[n];
  106.     for (int i=0; i<n; i++)
  107.     {
  108.         visited[i] = false;
  109.     }
  110.  
  111.     int ccnumber = 0;
  112.  
  113.     int *cc = new int[n];// сс[v] = номер компоненты, к которой принадлежит v
  114.     for (int i=0; i<n; i++)
  115.     {
  116.         cc[i] = 0;
  117.     }
  118.  
  119.     ccnumber = FindCCnum(AdjacencyMatrix,0,visited,n-1,n,cc);
  120.  
  121.     //showmatrix(AdjacencyMatrix,n);
  122.  
  123.     //DFS(AdjacencyMatrix, start-1,visited, finish-1,n);
  124.  
  125.     //if (visited[finish-1]==1) std::cout<<"1\n";
  126.     //if (visited[finish-1]==0) std::cout<<"0\n";
  127.  
  128.     std::cout<<"ccnumber= "<<ccnumber<<std::endl;
  129.  
  130.     delmatrix(AdjacencyMatrix, n);
  131.  
  132.  
  133.     system ("pause");
  134.     return 0;
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement