Cod sursa(job #584177)

Utilizator blustudioPaul Herman blustudio Data 24 aprilie 2011 14:36:51
Problema Parcurgere DFS - componente conexe Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <vector>
#include <fstream>
#include <iostream>
using namespace std;

struct node
{
	vector<unsigned long int> vertices;
	bool visited;
};

node nodes[100001];
unsigned long int n;
vector<unsigned long int> visit;
unsigned long int to_visit;
unsigned long int k;
unsigned long int conex;
unsigned long int m;

void read()
{
	ifstream fin("dfs.in");
	unsigned long int a, b;
	fin >> n >> m;
	for(unsigned long int i=0; i<=n; i++)
		nodes[i].visited = false;
	for(unsigned long int i=1; i<=m; i++)
	{
		fin >> a >> b;
		nodes[a].vertices.push_back(b);
		nodes[b].vertices.push_back(a);
	}
	fin.close();
}
void dfs()
{
	to_visit = visit.back();
	cout << to_visit << "\n";
	visit.pop_back();
	for(k=0; k<nodes[to_visit].vertices.size(); k++)
	{
		if(nodes[nodes[to_visit].vertices[k]].visited == false)
		{
			nodes[nodes[to_visit].vertices[k]].visited = true;
			visit.push_back(nodes[to_visit].vertices[k]);
		}
	}
}
void solve()
{
	conex = 0;
	for(unsigned long int i=1; i<=n; i++)
	{
		if(nodes[i].visited == false)
		{
			conex++;
			visit.push_back(i);
			nodes[i].visited = true;
			while(visit.empty() == false)
				dfs();
			cout << "\n";
		}
	}
}
void print()
{
	ofstream fout("dfs.out");
	fout << conex << "\n";
	fout.close();
}
int main()
{
	read();
	solve();
	print();
	return 0;
}