Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <vector>
- #include <queue>
- using namespace std;
- ifstream fin("components.in");
- ofstream fout("components.out");
- void bfs(int StartNode, vector <int>& Components, queue <int>& Nodes, vector <vector<bool>>& Matrix, int& ComponentNumber)
- {
- Components[Nodes.front()] = ComponentNumber;
- for (int i = 0; i < Components.size(); ++i) //searching for neighbors
- {
- if (Matrix[Nodes.front()][i] == 1 && Components[i] == 0)
- {
- Nodes.push(i);
- Components[i] = ComponentNumber;
- }
- }
- Nodes.pop();
- if (Nodes.empty())
- {
- ++ComponentNumber;
- return;
- }
- else
- bfs(Nodes.front(), Components, Nodes, Matrix, ComponentNumber);
- }
- int main()
- {
- int V, E, FirstNode, SecondNode, ComponentNumber = 1;
- queue <int> Nodes;
- fin >> V >> E;
- vector <vector<bool>> Matrix(V, vector<bool>(V));
- vector<int> Components(V);
- for (int i = 0; i < V; ++i)
- for (int j = 0; j < V; ++j) //initilazing matrix
- Matrix[i][j] = 0;
- for (int i = 0; i < V; ++i)
- Components[i] = 0;
- for (int i = 0; i < E; ++i) //filling matrix with edges
- {
- fin >> FirstNode >> SecondNode;
- Matrix[FirstNode - 1][SecondNode - 1] = 1;
- Matrix[SecondNode - 1][FirstNode - 1] = 1;
- }
- for (int i = 0; i < V; ++i)
- {
- if (Components[i] == 0)
- {
- Nodes.push(i);
- bfs(Nodes.front(), Components, Nodes, Matrix, ComponentNumber);
- }
- }
- fout << ComponentNumber - 1 << endl;
- for (int i = 0; i < Components.size(); ++i)
- fout << Components[i] << ' ';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement