Cod sursa(job #2819724)

Utilizator rimihaiMihai Radu-Ioan rimihai Data 18 decembrie 2021 21:23:50
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 4.47 kb
#include <bits/stdc++.h>
using namespace std;

#define NMaxNoduri 100001
#define NMaxNoduri2 50005
#define NMaxNoduri3 10005
#define INFINIT 0x3f3f3f3f
#define flowmax 1005



ifstream fin("bfs.in");
ofstream fout("bfs.out");

class Clasa_Graf
{
    int n, m;
    vector<vector<int>> lista_adiacenta;

public:
    Clasa_Graf();
    ~Clasa_Graf();
    void dfs(int x,unordered_map<int,bool>& vector_vizitat);
    void bfs(int x,unordered_map<int,bool>& vector_vizitat,list<int>& coada_bfs);
    void sortare_topologica(int x,unordered_map<int,bool>& vector_vizitat,deque<int>& lista_sorttop);
    void DFS1(int x, unordered_map<int,bool>& vector_vizitat, vector<int>& stiva);
    void DFS2(int x, int nrctc, unordered_map<int,bool>& vector_vizitat_2, vector<int> componente[NMaxNoduri], vector<int> lista_adiacenta2[NMaxNoduri]);
    void biconex(int start, int tp, unordered_map<int,int>& vizitat, int low[NMaxNoduri], stack<pair<int, int>>& stackCBC, vector <set <int>>& componentebcnx);
    void dfs_muchie_critica(int curr, int prev,int time, int disc[NMaxNoduri], int low2[NMaxNoduri], vector<vector<int>>& ans);
    bool HH(vector<int> grade);
    int find_node(int x, int par[]);
    void unite(int x,int y, int par[], int dim[]);
    void DFS_darb(int curr, int vizitat[], int& dist_max, int& nod_departe);
    bool BFSflow(int s, int fin, int f[flowmax][flowmax], int c[flowmax][flowmax], int tata[flowmax]);
    bool cuplaj(int k, bool vector_vizitat[], int st[], int dr[]);


    void infoarena_dfs();
    void infoarena_bfs();
    void infoarena_sortaret();
    void infoarena_ctc();
    void infoarena_biconex();
    void leetcode_muchiecritica();
    void havelhakimi();
    void infoarena_dijkstra();
    void infoarena_bellman_ford();
    void infoarena_pmd();
    void infoarena_apm();
    void infoarena_roy_floyd();
    void infoarena_darb();
    void infoarena_maxflow();
    void infoarena_ciclueuler();
    void infoarena_hamilton();
    void infoarena_cuplaj();
};

Clasa_Graf::Clasa_Graf()
{
    n=0;
    m=0;
}

Clasa_Graf::~Clasa_Graf()
{
}

void Clasa_Graf::dfs(int x, unordered_map<int,bool>& vector_vizitat)
{
    vector_vizitat[x] = true;
    for (int i=0; i<lista_adiacenta[x].size(); ++i)
        if (vector_vizitat[lista_adiacenta[x][i]]==0)
            dfs(lista_adiacenta[x][i],vector_vizitat);
}

void Clasa_Graf::bfs(int x, unordered_map<int,bool>& vector_vizitat, list<int>& coada_bfs)
{
    int distanta_minima[NMaxNoduri];
    memset(distanta_minima,-1, sizeof(distanta_minima));
    vector_vizitat[x]=true;
    coada_bfs.push_back(x);
    distanta_minima[x]=0;
    while(!coada_bfs.empty())
    {
        x = coada_bfs.front();
        coada_bfs.pop_front();
        for (int i=0; i<lista_adiacenta[x].size(); ++i)
        {
            if (distanta_minima[lista_adiacenta[x][i]]<0)
            {
                vector_vizitat[lista_adiacenta[x][i]] = true;
                coada_bfs.push_back(lista_adiacenta[x][i]);
                distanta_minima[lista_adiacenta[x][i]]=distanta_minima[x]+1;
            }
        }
    }
    for(int i=1; i<=n; i++)
        fout<<distanta_minima[i]<<" ";
}


void Clasa_Graf::infoarena_dfs()
{
    int comp_conexe=0;
    unordered_map<int,bool> vector_vizitat;
    fin>>n>>m;
    for(int i=1; i<=m; i++)
    {
        int a,b;
        fin>>a>>b;
        lista_adiacenta[a].push_back(b);
        lista_adiacenta[b].push_back(a);
    }
    dfs(1,vector_vizitat);
    comp_conexe=1;
    for(int i=2; i<=n; i++)
        if(vector_vizitat[i] == 0)
        {
            dfs(i,vector_vizitat);
            comp_conexe++;
        }
    fout<<comp_conexe;
}

void Clasa_Graf::infoarena_bfs()
{
    int st;
    unordered_map<int,bool> vector_vizitat;
    list<int> coada_bfs;
    fin>>n>>m>>st;
    for(int i=1; i<=m; i++)
    {
        int a,b;
        fin>>a>>b;
        lista_adiacenta[a].push_back(b);
    }
    bfs(st,vector_vizitat,coada_bfs);
}

int main()
{
    Clasa_Graf g;
    //g.infoarena_dfs();
    g.infoarena_bfs();
    //g.infoarena_sortaret();
    //g.infoarena_ctc();
    //g.infoarena_biconex();
    //g.leetcode_muchiecritica();
    //g.havelhakimi();
    //g.infoarena_dijkstra();
    //g.infoarena_bellman_ford();
    //g.infoarena_pmd();
    //g.infoarena_apm();
    //g.infoarena_roy_floyd();
    //g.infoarena_darb();
    //g.infoarena_maxflow();
    //g.infoarena_ciclueuler();
    //g.infoarena_cuplaj();
    return 0;
}