Concerning Graph Part II: Depth

2021-01-06  本文已影响0人  刘煌旭

This post gives the DFS impl, based on which, several other search problem concerning graph will be developed.

#include "graph.c"
typedef struct DepthFirstSearchStruct {
    bool *marked;
    int count;
}*DepthFirstSearch;

void DepthFirstSearchSearch(DepthFirstSearch dfs, Graph g, int v) {
    dfs->marked[v] = true;
    dfs->count++;
    int n;
    int *adj = GraphAdjcency(g, v, &n);
    for (int i = 0; i < n; i++) { if (!dfs->marked[adj[i]]) { DepthFirstSearchSearch(dfs, g, adj[i]); } }
    if (adj != NULL) free(adj);
}

bool DepthFirstSearchMarked(DepthFirstSearch dfs, int w) { return dfs->marked[w]; }

int DepthFirstSearchCount(DepthFirstSearch dfs) { return dfs->count; }

DepthFirstSearch DepthFirstSearchCreate(Graph g, int s) {
    DepthFirstSearch dfs = (DepthFirstSearch)malloc(sizeof(*dfs));
    dfs->marked = (bool*)malloc(sizeof(bool) * g->v);
    for (int i = 0; i < g->v; i++) { dfs->marked[i] = false; }
    dfs->count = 0;
    DepthFirstSearchSearch(dfs, g, s);
    return dfs;
}
上一篇 下一篇

猜你喜欢

热点阅读