Cod sursa(job #3123677)

Utilizator smoggyBorcila Vasile smoggy Data 25 aprilie 2023 09:02:28
Problema Parcurgere DFS - componente conexe Scor 15
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.4 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 + 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 = 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;
}