Cod sursa(job #3122735)

Utilizator smoggyBorcila Vasile smoggy Data 20 aprilie 2023 12:08:35
Problema Parcurgere DFS - componente conexe Scor 15
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#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 * 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;
}