Pagini recente » Cod sursa (job #1583120) | Cod sursa (job #2453434) | Cod sursa (job #2375816) | Cod sursa (job #59415) | Cod sursa (job #2819762)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define MAX 100001
using namespace std;
ifstream fin ("dfs.in");
ofstream fout("dfs.out");
vector <int> compBiconexe[MAX];
class Graf{
public:
//date membre
vector <int> A[MAX]; //liste de adiacenta
int mM, mN;
//constructor
Graf(int N, int M){
mN = N;
mM = M;
}
void BFS();
void DFS(int start, bool viz[MAX]);
void ComponenteConexe();
//
// void DFS_Biconex(int start, int father);
// void AfisareBiconex();
};
void Graf :: BFS(){
int x, y, start;
fin >> start;
for(int i = 1; i <= mM; i++){
fin >> x >> y;
A[x].push_back(y);
}
bool viz[MAX] = {false};
queue <int> Q;
int lg[MAX] = {0}; // lungimea drumului
// vizitam nodul curent
viz[start] = true;
// il punem in coada
Q.push(start);
// fout<<1;
while ( !Q.empty() ){
x = Q.front();
Q.pop();
// preluam primul element din coada apoi il eliminam din coada
for(int i = 0; i < A[x].size(); i++){
// parcurgem toti vecinii lui x
if(viz[A[x][i]] == 0){ // daca nu am mai vizitat vecinul asta{
Q.push(A[x][i]);
// il vizitam
viz[A[x][i]] = 1;
// creste lungimea drumului
lg[A[x][i]] = lg[x] + 1;
}
}
}
for(int i = 1; i <= mN; i++)
if(viz[i] != 0)
fout << lg[i] << " ";
else
fout << -1 << " ";
}
void Graf::DFS(int start, bool viz[MAX]) {
viz[start] = true;
// vizitam nodul din care plecam
for(int i = 0; i < A[start].size(); i++){
// parcurgem toti vecinii nodului start
if(!viz[A[start][i]] ){
// daca nu am mai vizitat acest vecin
DFS(A[start][i], viz);
}
}
}
void Graf::ComponenteConexe() {
int x, y;
for(int i = 1; i <= mM; i++){
fin >> x >> y;
A[x].push_back(y);
A[y].push_back(x);
}
bool viz[MAX] = {false};
int nrComp = 0;
for(int i = 1; i <= mN; i++){
if(!viz[i]){
nrComp++;
DFS(i,viz);
}
}
fout << nrComp;
}
int main(){
int N, M, S;
fin >> N >> M;
// fout << 1;
Graf G(N,M);
G.ComponenteConexe();
return 0;
}