Pagini recente » Cod sursa (job #438864) | Monitorul de evaluare | Profil bedeoan.raul | Statistici Gurzun Raluca (ralucagn) | Cod sursa (job #2741818)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//EDGES
typedef struct edge {
int leftNode;
int rightNode;
} edge;
typedef struct graphEdges {
edge* edges;
int numNodes;
int numEdges;
} graphEdges;
graphEdges readGraphEdgeList(const char* fileName)
{
graphEdges graph;
graph.numEdges = 0;
graph.edges = NULL;
FILE* f = fopen(fileName, "r");
if (f == NULL)
return graph;
fscanf(f, "%i%i", &graph.numNodes, &graph.numEdges);
graph.edges = (edge*)malloc(graph.numEdges * sizeof(edge));
for (int i = 0; i < graph.numEdges; i++)
fscanf(f, "%i%i", &graph.edges[i].leftNode, &graph.edges[i].rightNode);
fclose(f);
return graph;
}
void dfs_edges(graphEdges graph, int currentNode, int* visited)
{
visited[currentNode] = 1;
for (int i = 0; i < graph.numEdges; i++)
if (!visited[graph.edges[i].rightNode] && graph.edges[i].leftNode == currentNode)
dfs_edges(graph, graph.edges[i].rightNode, visited);
}
int main()
{
//EDGES
FILE* out;
graphEdges graphE = readGraphEdgeList("dfs.in");
int nr = 0, visited2[100001] = {0};
for (int i = 0; i < graphE.numNodes; i++) {
if (!visited2[i]) {
dfs_edges(graphE, i, visited2);
nr++;
}
}
out = fopen("dfs.out", "w");
fprintf(out, "%i", nr);
fclose(out);
return 0;
}