Cod sursa(job #1182038)

Utilizator toncuvasileToncu Vasile toncuvasile Data 4 mai 2014 15:40:14
Problema Parcurgere DFS - componente conexe Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
//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;
}