Pagini recente » Cod sursa (job #700380) | Cod sursa (job #2379194) | Cod sursa (job #2135922) | Cod sursa (job #473581) | Cod sursa (job #3122702)
#include <stdio.h>
#include <stdlib.h>
typedef struct edge {
int leftNode;
int rightNode;
} edge;
typedef struct graphEdges {
edge *edges;
int numNodes;
int numEdges;
} graphEdges;
typedef struct distance {
int name;
int distance;
} distance;
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 * 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[100005] = {0};
int contor = 0;
for (int i = 0; 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;
}