Cod sursa(job #2741522)

Utilizator bianca.ionascuIonascu Bianca Daniela bianca.ionascu Data 16 aprilie 2021 12:12:12
Problema Parcurgere DFS - componente conexe Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.61 kb
#include <ctype.h>
#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;

int cnt = 0;
void dfs_edges(graphEdges graph, int currentNode, int *visited)
{
    visited[currentNode] = 1;
    for (int i = 0; i < graph.numNodes; i++)
    {
        if (graph.edges[i].leftNode == currentNode)
        {
            if (!visited[graph.edges[i].rightNode] && visited[graph.edges[i].leftNode])
            {
                cnt++;
                dfs_edges(graph, graph.edges[i].rightNode, visited);
            }
        }
    }
}

graphEdges readGraphEdgeList(const char *fileName)
{
    graphEdges graph;
    graph.numEdges = 0;
    graph.edges = NULL;
    graph.edges = (edge *)malloc(sizeof(edge) * 30);
    FILE *f = fopen(fileName, "r");
    if (f == NULL)
        return graph;

    char buff[200];
    fgets(buff, 200, f);
    char *p = strtok(buff, " \n\r");
    graph.numNodes = atoi(p);
    p = strtok(NULL, " \n\r");
    graph.numEdges = atoi(p);
    int i = 0;
    while (!feof(f))
    {
        fgets(buff, 200, f);
        p = strtok(buff, " \n\r");
        graph.edges[i].leftNode = atoi(p);
        p = strtok(NULL, " \n\r");
        graph.edges[i].rightNode = atoi(p);
        i++;
    }
    fclose(f);
    return graph;
}

int main()
{
    FILE *f = fopen("dfs.out", "w");
    graphEdges graphE = readGraphEdgeList("dfs.in");
    int visited2[100] = {0}; //we assume fewer than 100 nodes
    dfs_edges(graphE, 1, visited2);
    fprintf(f, "%d", cnt + 1);
}