Cod sursa(job #2796929)

Utilizator Costin_PintilieHoratiu-Costin-Petru Pintilie Costin_Pintilie Data 9 noiembrie 2021 01:10:29
Problema Parcurgere DFS - componente conexe Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.3 kb
#include <bits/stdc++.h>
using namespace std;



class Graph{
private:
        int n; //nr de noduri, nr de muchii, nodul de inceput
        int m;
        int s;
        vector<vector <int>> adj; // adj = adjacent (=liste de vecini)
public:

    void BFS_read();
    void BFS();

    void DFS_read();
    void DFS();
};

void Graph::DFS_read(){
    ifstream fin("dfs.in");
    fin>>n>>m;
    int x,y;
    adj.resize(n+1);
    for(int i = 0; i < m; i++){
        fin>>x>>y;
        adj[x].push_back(y);
        adj[y].push_back(x);
    }
    fin.close();
}

void Graph::DFS(){
    bool visited[n+1] = {0};
    queue<int> q;
    int conex = 0;

    for(int i = 1; i < n+1; i++){
        if(!visited[i]){
            conex++;
            q.push(i);
            while( !q.empty() ){
                int curr_node = q.front();
                visited[curr_node] = 1;
                q.pop();

                for(int j = 0; j < adj[curr_node].size(); j++){
                    if(!visited[ adj[ curr_node][j] ] )
                        q.push(adj[curr_node][j] );
                }
            }
        }
    }
    ofstream fout("dfs.out");
    fout<<conex;
    fout.close();

}

void Graph::BFS_read(){
    ifstream fin("bfs.in");
    fin>>n>>m>>s;
    int x,y;
    adj.resize(n+1);
    for(int i = 0; i < m; i++){
        fin>>x>>y;
        adj[x].push_back(y);
    }
    fin.close();
}

void Graph::BFS(){
    bool visited[n+1];
    int length[n+1];

    for(int i = 0; i < n+1; i++){
        visited[i] = false;
        length[i] = -1;
    }

    visited[s] = true;
    length[s] = 0;

    queue<int> q;
    q.push(s);

    while(!q.empty()){
        int curr_node = q.front();
        q.pop();
        int nr_vec = adj[curr_node].size();

        for(int i = 0; i<nr_vec;i++){
            int x = adj[curr_node][i];

            if(!visited[x]){
                visited[x] = true;
                q.push(x);
                length[x] = length[curr_node] + 1;
            }
        }
    }

    ofstream fout("bfs.out");
    for(int i = 1; i <= n; i++){
        fout<<length[i]<<" ";
    }
    fout.close();
}

int main()
{
    Graph test;
//    test.BFS_read();
//    test.BFS();
    test.DFS_read();
    test.DFS();


    return 0;
}