Pagini recente » Istoria paginii runda/winners20 | Cod sursa (job #1047914) | Cod sursa (job #1714990) | Cod sursa (job #1714997) | Cod sursa (job #2799051)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream f("dfs.in");
ofstream g("dfs.out");
class Graf
{
private:
int Noduri, Muchii;
vector <vector<int>> ListaAdiacenta;
public:
Graf(){}
Graf( int Noduri, int Munchii, vector <vector<int>> ListaAdiacenta)
{
this->Noduri = Noduri;
this->Muchii = Muchii;
this->ListaAdiacenta= ListaAdiacenta;
}
~Graf()
{
this->Noduri = 0;
this->Muchii = 0;
this->ListaAdiacenta.clear();
}
void SetNoduri(int n)
{
Noduri = n;
}
int GetNoduri()
{
return Noduri;
}
void SetMuchii(int m)
{
Muchii = m;
}
int GetMuchii()
{
return Muchii;
}
void codBFS(int s);
void codDFS(int nod, bool vizitat[]);
void ComponenteConexe(bool vizitat[]);
};
void Graf::codBFS(int s)
{
queue <int> coada;
int distanta[Noduri+1] = {0};
bool vizitat[Noduri+1] = {false};
vizitat[s] = true;
coada.push(s);
while(coada.size()!= 0)
{
for (int nod : ListaAdiacenta[coada.front()])
{
if(vizitat[nod]==false)
{
vizitat[nod]=true;
distanta[nod]=distanta[coada.front()]+1;
coada.push(nod);
}
}
coada.pop();
}
for(int i= 1; i <= Noduri; i++)
if(s!=i && distanta[i]==0)
g<<-1<<' ';
else
g<<distanta[i]<<' ';
}
void Graf::codDFS(int nod, bool vizitat[])
{
vizitat[nod]=true;
for(int i : ListaAdiacenta[nod])
if(vizitat[i]==false)
DFS(i, vizitat[i]);
}
void Graf::ComponenteConexe(bool vizitat[])
{
int nr = 0;
for(int i=1; i<=Noduri; i++)
if(vizitat[i]==false)
{
nr++;
codDFS(i, vizitat[i]);
}
cout<<nr;
}
void Bfs()
{
int n, m, x, y, s;
f>>n>>m>>s;
vector <vector<int>> ListaAdiacenta(n+1);
for(int i= 0; i < m; i++)
{
f>>x>>y;
ListaAdiacenta[x].push_back(y);
}
Graf G(n, m, ListaAdiacenta);
G.codBFS(s);
}
void Dfs()
{
int n, m, x, y;
cin>>n>>m;
bool vizitat[n+1] = {false};
vector <vector<int>> ListaAdiacenta(n+1);
for(int i=0; i < m; i++)
{
f>>x>>y;
ListaAdiacenta[x].push_back(y);
ListaAdiacenta[y].push_back(x);
Graf G(n, m, ListaAdiacenta);
G.ComponenteConexe(vizitat);
}
}
int main()
{
Dfs();
f.close();
g.close();
return 0;
}