Pagini recente » Cod sursa (job #2542261) | Cod sursa (job #804241) | Cod sursa (job #2729288) | Cod sursa (job #1047113) | Cod sursa (job #1182038)
//Parcurgerea DFS.
//Implementarea utilizind Liste de Adiacenta.
//Meotda Iterativa.
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
int viz[100005];
int n,m;
vector <int> L[100005];
ifstream inFile("dfs.in");
ofstream outFile("dfs.out");
void Read()
{
//Citim Graful
//n - Numarul de noduri, variabila globala;
//m - Numarul de Arce Neorinetate, variabila globala;
//L - Liste de Adiacenta, variabila globala;
inFile >> n >> m;
int x,y;
for(int i=1; i<=m; i++){
inFile >> x >> y;
L[x].push_back(y);
L[y].push_back(x);
}
}
void DFS(int i)
{
queue <int> Q;
viz[i]=1;
for(unsigned int j=0;j<L[i].size();j++){
if( !viz[ L[i][j] ] ){
Q.push(L[i][j]);
}
}
while(!Q.empty()){
int x=Q.front();
viz[x]=1;
Q.pop();
for(unsigned int j=0;j<L[x].size();j++){
if( !viz[ L[x][j] ] ){
Q.push(L[x][j]);
}
}
}
}
int main()
{
Read();
int ct=0; //Numarul de Componente Conexe Distincte;
for(int i=1;i<=n;i++){
if(!viz[i]){
ct++;
DFS(i); //Incepem "sondarea" din nodul i;
}
}
outFile << ct;
return 0;
}