Exemple #1
0
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);
}
Exemple #2
0
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();
}
Exemple #3
0
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);

  }

}
Exemple #4
0
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;
}
Exemple #5
0
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);
  }
}
Exemple #6
0
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;

}