Pagini recente » Cod sursa (job #1613278) | Cod sursa (job #2328734) | Cod sursa (job #2555951) | Cod sursa (job #2156459) | Cod sursa (job #2797706)
#include <bits/stdc++.h>
using namespace std;
/*
/// FISIERE BFS
ifstream in("bfs.in");
ofstream out("bfs.out");
*/
/// FISIERE DFS
ifstream in("dfs.in");
ofstream out("dfs.out");
/*
/// FISIERE BICONEX
ifstream in("biconex.in");
ofstream out("biconex.out");
*/
class Graf
{
int nr_N, nr_M, S;
vector<int> adiac[100001];
public:
/// Constructori
Graf() : nr_N(0), nr_M(0) {}
Graf(int N, int M) : nr_N(N), nr_M(M) {}
void citire_or();
void citire_neor();
void BFS();
void DFS(int,vector<int>&);
void conexe();
};
void Graf::citire_or()/// GRAF ORIENTAT
{
in >> nr_N >> nr_M >> S;
for (int i = 0; i < nr_M; i++)
{
int x, y;
in >> x >> y;
adiac[x].push_back(y);
}
}
void Graf::citire_neor()/// GRAF NEORIENTAT
{
in >> nr_N >> nr_M;
for (int i = 0; i < nr_M; i++)
{
int x, y;
in >> x >> y;
adiac[x].push_back(y);
adiac[y].push_back(x);
}
}
void Graf::BFS()
{
queue <int> coada;
int nod;
int vizitat[100001] = {};
vizitat[S] = 1;
coada.push(S);
int cost[100001] = {};
cost[S] = 0;///Costul la nodul de start este 0
while(coada.size() > 0) ///Cat timp inca mai am noduri in graf
{
nod = coada.front();
for(int j = 0; j < adiac[nod].size(); j++)
{
if(vizitat[adiac[nod][j]] == 0)
{
coada.push(adiac[nod][j]);
cost[adiac[nod][j]] = cost[nod] + 1;
vizitat[adiac[nod][j]]++;
}
}
coada.pop();
}
for(int i = 1; i <= nr_N; i++)
{
if(vizitat[i] == 0) out << "-1 ";
else out << cost[i] << " ";
}
}
void Graf::DFS(int S, vector<int>& vizitat)
{
vizitat[S] = 1;
cout << S << " ";
for(int i = 0; i < adiac[S].size(); i++)
{
if (vizitat[adiac[S][i]] ==0)
{
///cout << adiac[S][i] << " ";
DFS(adiac[S][i], vizitat);
}
}
}
void Graf::conexe()
{
vector<int> vizitat;
int nr=0, i;
for(i = 0; i <= nr_N; i++)
vizitat.push_back(0);
for(i = 1; i <= nr_N; i++)
{
if (vizitat[i] == 0)
{
DFS(i,vizitat);
nr++;
}
}
out << nr;
}
int main()
{
Graf G;
/*
///BFS
G.citire_or();
G.BFS();
*/
///DFS
G.citire_neor();
G.conexe();
return 0;
}