Cod sursa(job #1009087)

Utilizator alexandru70Ungurianu Alexandru alexandru70 Data 12 octombrie 2013 14:41:42
Problema Parcurgere DFS - componente conexe Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <forward_list>

using namespace std;
ifstream in ("dfs.in");
ofstream out ("dfs.out");

vector<unsigned int> viz;
vector<forward_list<unsigned int> >adLs;

void dfs(unsigned int nod, unsigned int cpId) {
	viz[nod]=cpId;
	for(const auto &i:adLs[nod]) {
		if(!viz[i]){
			dfs(i,cpId);
		}
	}
}

void printVector(vector<unsigned int> &v) {
	for(const auto &i:v) {
		cout << i << ' ';
	}
	cout << '\n';
}

int main() {
	int n;
	in >> n;
	viz.resize(n+1);
	adLs.resize(n+1);
	
	int m;
	in >> m;
	for(int i = 0; i < m; ++i) {
		int a,b;
		in >> a >> b;
		adLs[a].push_front(b);
		adLs[b].push_front(a);
	}
	bool hasFreeNodes = false;
	int cnt = 1;
	do {
		int i = 1;
		for(i = 1; i <= n; ++i) {
			if(!viz[i]) {
				hasFreeNodes = true;
				break;
			}
		}
		if(i > n) break;
		cout << i << '\n';
		dfs(i,cnt++);
		printVector(viz);
	} while(hasFreeNodes);
	out << cnt-1 << '\n';
	return 0;
}