Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <fstream>
- #include <string>
- #include <queue>
- using namespace std;
- vector<int> comp;
- vector<bool> used;
- class Graph
- {
- private:
- int n;
- vector<vector<int>> Matrix;
- public:
- Graph() : n() {}
- Graph(int &N, vector<vector<int>> &matrix)
- {
- n = N;
- SetMatrix(matrix);
- }
- Graph(Graph &g)
- {
- n = g.n;
- SetMatrix(g.Matrix);
- }
- void SetMatrix(vector<vector<int>> &matrix)
- {
- if (matrix.size() != matrix[0].size())
- {
- throw "matrix in incorrect";
- return;
- }
- int n = matrix.size();
- Matrix.resize(n);
- for (int i = 0; i < n; i++)
- Matrix[i].resize(n);
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++)
- {
- if (matrix[i][j] == 0 || matrix[i][j] == 1)
- Matrix[i][j] = matrix[i][j];
- else
- {
- throw "matrix in incorrect";
- return;
- }
- }
- }
- int AmountNeighbour(int &v)
- {
- int result = 0;
- for (int i = 0; i < n; i++)
- if (Matrix[v][i] != 0)
- result++;
- return result;
- }
- bool IsFull()
- {
- int sum = 0;
- for (int i = 0; i < n; i++)
- sum += AmountNeighbour(i);
- if (sum == n * (n - 1) / 2)
- return true;
- else
- return false;
- }
- void bfs(int s)
- {
- queue<int> q;
- q.push(s);
- used[s] = true;
- while (!q.empty())
- {
- int v = q.front();
- q.pop();
- for (int i = 0; i < n; i++)
- {
- if (used[i] == false && Matrix[v][i] != 0)
- {
- used[i] = true;
- q.push(i);
- }
- }
- }
- }
- int find_comps()
- {
- int result = 0;
- used.resize(n);
- for (int i = 0; i < n; i++)
- used[i] = false;
- for (int i = 0; i < n; ++i)
- if (!used[i])
- {
- bfs(i);
- result++;
- }
- return result;
- }
- };
- int main()
- {
- int n;
- Graph g;
- cout << "input way to file" << endl;
- string InFile;
- cin >> InFile;
- ifstream in(InFile);
- if (!in)
- {
- cerr << "can`t open file: " << InFile << endl;
- exit(1);
- }
- in >> n;
- vector<vector<int>> matrix;
- matrix.resize(n);
- for (int i = 0; i < n; i++)
- matrix[i].resize(n);
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++)
- in >> matrix[i][j];
- try
- {
- g = Graph(n, matrix);
- }
- catch (char *error)
- {
- cout << error << endl;
- system("pause");
- return 0;
- }
- cout << g.find_comps();
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement