Advertisement
STALKER-FC

Untitled

Jul 9th, 2015
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.31 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <fstream>
  4. #include <string>
  5. #include <queue>
  6.  
  7. using namespace std;
  8. vector<int> comp;
  9. vector<bool> used;
  10.  
  11. class Graph
  12. {
  13. private:
  14.     int n;
  15.     vector<vector<int>> Matrix;
  16. public:
  17.     Graph() : n() {}
  18.     Graph(int &N, vector<vector<int>> &matrix)
  19.     {
  20.         n = N;
  21.         SetMatrix(matrix);
  22.     }
  23.     Graph(Graph &g)
  24.     {
  25.         n = g.n;
  26.         SetMatrix(g.Matrix);
  27.     }
  28.     void SetMatrix(vector<vector<int>> &matrix)
  29.     {
  30.         if (matrix.size() != matrix[0].size())
  31.         {
  32.             throw "matrix in incorrect";
  33.             return;
  34.         }
  35.         int n = matrix.size();
  36.         Matrix.resize(n);
  37.         for (int i = 0; i < n; i++)
  38.             Matrix[i].resize(n);
  39.         for (int i = 0; i < n; i++)
  40.             for (int j = 0; j < n; j++)
  41.             {
  42.                 if (matrix[i][j] == 0 || matrix[i][j] == 1)
  43.                     Matrix[i][j] = matrix[i][j];
  44.                 else
  45.                 {
  46.                     throw "matrix in incorrect";
  47.                     return;
  48.                 }
  49.             }
  50.     }
  51.     int AmountNeighbour(int &v)
  52.     {
  53.         int result = 0;
  54.         for (int i = 0; i < n; i++)
  55.             if (Matrix[v][i] != 0)
  56.                 result++;
  57.         return result;
  58.     }
  59.     bool IsFull()
  60.     {
  61.         int sum = 0;
  62.         for (int i = 0; i < n; i++)
  63.             sum += AmountNeighbour(i);
  64.         if (sum == n * (n - 1) / 2)
  65.             return true;
  66.         else
  67.             return false;
  68.     }
  69.    
  70.     void bfs(int s)
  71.     {
  72.         queue<int> q;
  73.         q.push(s);
  74.         used[s] = true;
  75.        
  76.         while (!q.empty())
  77.         {
  78.             int v = q.front();
  79.             q.pop();
  80.            
  81.             for (int i = 0; i < n; i++)
  82.             {
  83.                 if (used[i] == false && Matrix[v][i] != 0)
  84.                 {
  85.                     used[i] = true;
  86.                     q.push(i);
  87.                 }
  88.             }
  89.         }
  90.     }
  91.    
  92.     int find_comps()
  93.     {
  94.         int result = 0;
  95.         used.resize(n);
  96.         for (int i = 0; i < n; i++)
  97.             used[i] = false;
  98.        
  99.         for (int i = 0; i < n; ++i)
  100.             if (!used[i])
  101.             {
  102.                 bfs(i);
  103.                 result++;
  104.                
  105.             }
  106.         return result;
  107.     }
  108.  
  109. };
  110.  
  111. int main()
  112. {
  113.     int n;
  114.     Graph g;
  115.     cout << "input way to file" << endl;
  116.     string InFile;
  117.     cin >> InFile;
  118.     ifstream in(InFile);
  119.     if (!in)
  120.     {
  121.         cerr << "can`t open file: " << InFile << endl;
  122.         exit(1);
  123.     }
  124.     in >> n;
  125.     vector<vector<int>> matrix;
  126.     matrix.resize(n);
  127.     for (int i = 0; i < n; i++)
  128.         matrix[i].resize(n);
  129.     for (int i = 0; i < n; i++)
  130.         for (int j = 0; j < n; j++)
  131.             in >> matrix[i][j];
  132.     try
  133.     {
  134.         g = Graph(n, matrix);
  135.     }
  136.     catch (char *error)
  137.     {
  138.         cout << error << endl;
  139.         system("pause");
  140.         return 0;
  141.     }
  142.     cout << g.find_comps();
  143.  
  144.     system("pause");
  145.     return 0;
  146. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement