void dfs_rec(int n, int depth[]) { for (int c : g[n]) { if (depth[c] == 0) { dfs_rec(c, depth); } depth[n] = std::max(depth[n], depth[c] + 1); } depth[n] = std::max(depth[n], 1); }
void dfs(struct graph *s, unsigned src) { unsigned *pre = malloc(s->order * sizeof (unsigned)); unsigned *c = malloc(sizeof (unsigned)); *c = 0; for (unsigned i =0; i < s->order; i++) pre[i] = s->order + 1; init_spanning_output("write1.txt"); dfs_rec(s, src, -1, pre, c); free(pre); free(c); close_spanning_output(); }
void dfs_rec(Graph &g, int arg, vector<int> &answer){ g.visited[arg] = true; while(true){ int next = g.next(arg); if(next==-1){ answer.push_back(arg); return; } else if(g.visited[next]) continue; else dfs_rec(g,next,answer); } }
int dfs(int nums_count) { int max_depth = 0; int depth[MAX_NUMBER]; std::fill_n(depth, sizeof(depth)/sizeof(depth[0]), 0); for (int i = 1; i <= nums_count; ++i) { LOG("dfs for: %d\n", i); if ((g[i].size() == 0) || (depth[i] > 0)) { continue; } dfs_rec(i, depth); max_depth = std::max(max_depth, depth[i]); } return max_depth; }
void dfs_rec(struct graph *g, unsigned v, unsigned p, unsigned pre[], unsigned *c) { *c = *c + 1; pre[v] = *c; unsigned *sname = NULL; for_successors(g, v, sname) { if (pre[*sname] > g->order) { pre[*sname] = *c; print_discovery(v, *sname); dfs_rec(g, *sname, v, pre, c); } else if ((p != *sname) && (pre[v] > pre[*sname])) print_backward(v, *sname); } }
void work(Graph &g){ first = true; vector<int> answer; vector<int>::reverse_iterator i_ret; for(int i=1;i<=numNode;i++){ g.reset(numNode); if(!g.visited[i]) dfs_rec(g,i,answer); } for(i_ret=answer.rbegin();i_ret!=answer.rend();i_ret++){ if(i_ret!=answer.rbegin()) cout << ' ' << *i_ret; else cout << *i_ret; } cout << endl; }