Pagini recente » infoarena - comunitate informatica, concursuri de programare | Cod sursa (job #1282206) | Cod sursa (job #1005340) | Cod sursa (job #3223600) | Cod sursa (job #3123695)
#include <stdio.h>
#include <stdlib.h>
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;
FILE *f = fopen(fileName, "r");
fscanf(f, "%d %d", &graph.numNodes, &graph.numEdges);
graph.edges = (edge *)malloc((graph.numEdges + 1) * sizeof(edge));
for (int i = 0; i < graph.numEdges; i++)
fscanf(f, "%d %d", &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 (currentNode == graph.edges[i].leftNode && visited[graph.edges[i].rightNode] == 0) {
dfs_edges(graph, graph.edges[i].rightNode, visited);
}
if (currentNode == graph.edges[i].rightNode && visited[graph.edges[i].leftNode] == 0) {
dfs_edges(graph, graph.edges[i].leftNode, visited);
}
}
}
int main()
{
graphEdges newGraph = readGraphEdgeList("dfs.in");
int *visited = (int *)malloc((newGraph.numNodes + 1) * sizeof(int));
for (int i = 0; i <= newGraph.numNodes; i++)
visited[i] = 0;
int contor = 0;
for (int i = 1; i <= newGraph.numNodes; i++)
if (visited[i] == 0) {
contor++;
dfs_edges(newGraph, i, visited);
}
FILE *f = fopen("dfs.out", "w");
fprintf(f, "%d", contor);
fclose(f);
return 0;
}