Cod sursa(job #3122701)

Utilizator smoggyBorcila Vasile smoggy Data 20 aprilie 2023 09:40:23
Problema Parcurgere DFS - componente conexe Scor 15
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.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;
}