Cod sursa(job #2742908)

Utilizator JipiJipianu Mihnea Jipi Data 22 aprilie 2021 12:17:16
Problema Parcurgere DFS - componente conexe Scor 5
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//EDGES
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;
	graph.numEdges = 0;
	graph.edges = NULL;
	FILE* f = fopen(fileName, "r");
	if (f == NULL)
		return graph;

	fscanf(f, "%i%i", &graph.numNodes, &graph.numEdges);
	graph.edges = (edge*)malloc(graph.numEdges * sizeof(edge));
	for (int i = 0; i < graph.numEdges; i++)
		fscanf(f, "%i%i", &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 (!visited[graph.edges[i].rightNode] && graph.edges[i].leftNode == currentNode)
			dfs_edges(graph, graph.edges[i].rightNode, visited);
}

int main()
{
	//EDGES
	FILE* out;
	graphEdges graphE = readGraphEdgeList("dfs.in");
	int nr = 0, visited2[100001] = {0};
	for (int i = 0; i < graphE.numNodes; i++) {
		if (!visited2[i]) {
			dfs_edges(graphE, i, visited2);
			nr++;
		}
	}
	out = fopen("dfs.out", "w");
	fprintf(out, "%i", nr);
	fclose(out);

	return 0;
}