Pagini recente » Cod sursa (job #3122454) | Cod sursa (job #1155583) | Cod sursa (job #3279947) | Cod sursa (job #3122698) | Cod sursa (job #3122823)
#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);
if (currentNode == graph.edges[i].leftNode && visited[graph.edges[i].leftNode] == 0)
dfs_edges(graph, graph.edges[i].leftNode, visited);
if (currentNode == graph.edges[i].rightNode && visited[graph.edges[i].rightNode] == 0)
dfs_edges(graph, graph.edges[i].rightNode, 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 = 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;
}