Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- void depth_first_search_step(vector< vector< int > > &edge, int connected_top[], int act_connected_top, int top, bool visited[]){
- if(visited[top]==true)
- return;
- visited[top] = true;
- connected_top[top] = act_connected_top;
- for(int i = 0; i<edge[top].size(); i++){
- if(visited[edge[top][i]]==false)
- depth_first_search_step(edge, connected_top, act_connected_top, edge[top][i], visited);
- }
- return;
- }
- void depth_first_search(vector< vector< int > > &edge, int connected_top[], int act_connected_top, int top){
- bool visited[edge.size()];
- for(int i=0; i<edge.size(); i++)
- visited[i] = false;
- depth_first_search_step(edge, connected_top, act_connected_top, top, visited);
- return;
- }
- //zmieniłem nazwę tej funkcji to nie było test, tylko chyba check_graph
- void test(){
- int set_numbers;
- vector< vector< int > > edge;
- vector< int > pom;
- cin >> set_numbers;
- for(int tmpEdges=0; tmpEdges<set_numbers; tmpEdges++){
- edge.clear();
- int edgesQuantity;
- cin >> edgesQuantity;
- for(int l=0; l<edgesQuantity; l++){
- int top1,top2;
- cin >> top1 >> top2;
- while(edge.size()<top1 || edge.size()<top2)
- edge.push_back(pom);
- edge[top1-1].push_back(top2-1);
- edge[top2-1].push_back(top1-1);
- }
- int connected_top[edge.size()-1];
- for(int i=0; i<edge.size(); i++)
- connected_top[i] = 0;
- int act_connected_top = 0;
- for(int i=0; i<edge.size(); i++){
- if(connected_top[i]==0){
- act_connected_top++;
- depth_first_search(edge, connected_top, act_connected_top, i);
- }
- }
- for(int i=0; i<edge.size(); i++){
- act_connected_top = connected_top[i];
- bool occurred = false;
- for(int j=0; j<i; j++){
- if(connected_top[j] == act_connected_top){
- occurred = true;
- break;
- }
- }
- if(!occurred) {
- if(tmpEdges!=0 && act_connected_top == 1)
- cout << endl << endl;
- else if(act_connected_top != 1)
- cout << endl;
- cout << connected_top[i] << ":";
- for(int j=i; j<edge.size(); j++){
- if(connected_top[j]==act_connected_top)
- cout << " " << j+1;
- }
- }
- }
- }
- return;}
- int main() {
- test();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement