Pagini recente » Cod sursa (job #1713484) | Cod sursa (job #50157) | Cod sursa (job #3272941) | Cod sursa (job #2615772) | Cod sursa (job #936369)
Cod sursa(job #936369)
#include <fstream>
#include <vector>
class Graph {
public:
Graph(const char* file);
~Graph();
void read(const char* file);
void dfs();
void dfsVisit(int u);
int getNoCC();
private:
int N;
int M;
std::vector<int>* adj;
bool* visited;
int noCC;
};
int main()
{
Graph G("dfs.in");
G.dfs();
std::ofstream fout("dfs.out");
fout << G.getNoCC() << '\n';
fout.close();
return 0;
}
Graph :: Graph(const char* file) :
adj(NULL),
visited(NULL),
noCC(0)
{
read(file);
}
Graph :: ~Graph()
{
delete[] adj;
delete[] visited;
}
void Graph :: read(const char* file)
{
std::ifstream fin(file);
int i, j;
fin >> N >> M;
adj = new std::vector<int> [N + 1];
while (fin >> i >> j) {
adj[i].push_back(j);
}
fin.close();
}
void Graph :: dfs()
{
visited = new bool[N + 1];
for (int i = 1; i <= N; i++) {
visited[i] = false;
}
noCC = 0;
for (int u = 1; u <= N; u++) {
if (!visited[u]) {
dfsVisit(u);
noCC++;
}
}
}
void Graph :: dfsVisit(int u)
{
visited[u] = true;
for (unsigned int i = 0; i < adj[u].size(); i++) {
if (!visited[adj[u][i]]) {
dfsVisit(adj[u][i]);
}
}
}
int Graph :: getNoCC()
{
return noCC;
}