Pagini recente » Cod sursa (job #792735) | Cod sursa (job #3131879) | Cod sursa (job #901032) | Cod sursa (job #2292763) | Cod sursa (job #489040)
Cod sursa(job #489040)
// http://infoarena.ro/problema/dfs
#include <fstream>
#include <algorithm>
#include <vector>
#include <list>
using namespace std;
int nodes,edges,conexComponents;
vector<list<int>> graph;
vector<bool> visited;
void read();
void depthFirst(int startNode);
void write();
int main() {
read();
for(vector<bool>::iterator it=visited.begin();it<visited.end();it++) {
if(*it) {
depthFirst(*it);
conexComponents++;
}
}
write();
return (0);
}
void read() {
ifstream in("dfs.in");
int from,to;
in >> nodes >> edges;
graph.resize(nodes+1);
visited.resize(nodes+1);
visited.at(0) = true;
for(int i=1;i<=edges;i++) {
in >> from >> to;
graph.at(from).push_back(to);
graph.at(to).push_back(from);
}
in.close();
}
void depthFirst(int toVisit) {
visited.at(toVisit) = true;
for(list<int>::iterator it=graph.at(toVisit).begin();it!=graph.at(toVisit).end();it++)
if(!visited.at(*it))
depthFirst(*it);
}
void write() {
ofstream out("dfs.out");
out << conexComponents-1 << "\n";
out.close();
}