Mai intai trebuie sa te autentifici.

Cod sursa(job #1478426)

Utilizator alexandru.huleaAlexandru Hulea alexandru.hulea Data 28 august 2015 16:44:54
Problema Parcurgere DFS - componente conexe Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>
#include <vector>

using namespace std;

int nextNod = 0;

void dfs(int sursa, vector<int>* vecini, bool* visited, int& nr_left) {
	for (int i = 0; i < vecini[sursa].size(); i++) {
		int vecin = vecini[sursa][i];
		if (!visited[vecin]) {
			if (vecin == nextNod) {
				nextNod++;
			}
			nr_left--;
			visited[vecin] = true;
			dfs(vecin, vecini, visited, nr_left);
		}
	}
}

int main() {

	freopen("dfs.in", "r", stdin);
	freopen("dfs.out", "w", stdout);

	int n, m;
	scanf("%i%i", &n, &m);
	vector<int>* vecini = new vector<int>[n];
	for (int i = 0; i < m; i++) {
		int x, y;
		scanf("%i%i", &x, &y);
		x--;
		y--;
		vecini[x].push_back(y);
		vecini[y].push_back(x);
	}

	bool* visited = new bool[n];
	for (int i = 0; i < n; i++) {
		visited[i] = false;
	}
	int nr_left = n;
	int nr_comp_conexe = 0;
	nextNod = 0;

	while(nr_left != 0) {
		nr_comp_conexe++;
		int start = -1;
		for (int i = nextNod; i < n; i++) {
			if (!visited[i]) {
				start = i;
				nextNod = start + 1;
				break;
			}
		}

		nr_left--;
		visited[start] = true;
		dfs(start, vecini, visited, nr_left);
	}

	printf("%i", nr_comp_conexe);

	fclose(stdin);
	fclose(stdout);
	return 0;
}