Pagini recente » tema | Cod sursa (job #1198862) | Clasamentul arhivei de probleme | Cod sursa (job #1690510) | Cod sursa (job #2741203)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef struct graphEdges {
int node;
struct graphEdges* neighbors;
int nr_neighbors;
} graphEdges;
int N, M;
graphEdges* readGraphEdgeList(const char* fileName)
{
FILE* f = fopen(fileName, "r");
fscanf(f, "%d%d", &N, &M);
graphEdges* graph=(graphEdges*)malloc((N+1)*sizeof(graphEdges));
for (int i = 1; i <= N; i++)
{
graph[i].node = i;
graph[i].nr_neighbors = 0;
graph[i].neighbors = NULL;
}
int left, right;
for (int i = 0; i < M; i++) {
fscanf(f, "%d%d", &left,&right);
graph[left].nr_neighbors++;
graph[left].neighbors = (graphEdges*)realloc(graph[left].neighbors, (graph[left].nr_neighbors + 1) * sizeof(graphEdges));
graph[left].neighbors[graph[left].nr_neighbors - 1] = graph[right];
graph[right].nr_neighbors++;
graph[right].neighbors = (graphEdges*)realloc(graph[right].neighbors, (graph[right].nr_neighbors + 1) * sizeof(graphEdges));
graph[right].neighbors[graph[right].nr_neighbors - 1] = graph[left];
}
fclose(f);
return graph;
}
void dfs_edges(graphEdges* graph,int node,int* visited)
{
visited[node] = 1;
for (int i = 0; i < graph[node].nr_neighbors; i++)
if (visited[graph[node].neighbors[i].node] == 0)
dfs_edges(graph, graph[node].neighbors[i].node, visited);
}
int main()
{
graphEdges* graphE = readGraphEdgeList("dfs.in");
int n = 0;
int* visited = (int*)calloc(N + 1, sizeof(int));
for (int i = 1; i <= N; i++)
if(visited[i]==0)
{
n++;
dfs_edges(graphE, i, visited);
}
FILE* f = fopen("dfs.out", "w");
fprintf(f, "%d", n);
fclose(f);
return 0;
}