int DIGRAPHdfs( Digraph G, Vertex r) { 
    Vertex v;
    conta = 0;
    for (v = 0; v < G->V; v++) lbl[v] = -1;
    dfsR( G, r);
    if (conta < G->V) return -1;
    return 0;
}
void dfsR( Digraph G, Vertex v) { 
    Vertex w;
    lbl[v] = conta++; 
    for (w = 0; w < G->V; w++)
       if (G->adj[v][w] != 0) 
            if (lbl[w] == -1)
                dfsR( G, w); 
}
Beispiel #3
0
void dfsR(Graph G, Edge e)
{
    link t; int v, w = e.w; Edge x;
    if (e.v != e.w)
        printf("edge (%d, %d) is tree \n", e.v, e.w) ;
    st[e.w] = e.v;
    pre[w] = time++;
    for (t = G->adj[w]; t != NULL; t = t->next)
      if (pre[t->v] == -1)
        dfsR(G, EDGE(w, t->v));
      else {
        v = t->v;
        x = EDGE(w, v);
        if (pre[w] < pre[v])
            printf("edge (%d, %d) is back \n", x.v, x.w) ;
      }
    post[w] = time++;
}
Beispiel #4
0
void GRAPHdfs(Graph G)
{
    int v;
    time = 0;
    for (v=0; v < G->V; v++)
    {
      pre[v] = -1;
      post[v] = -1;
      st[v] =  -1;
    }
    for (v=0; v < G->V; v++)
      if (pre[v]== -1)
        dfsR(G, EDGE(v,v));

    printf("discovery/endprocessing time labels \n");
    for (v=0; v < G->V; v++)
        printf("vertex %d : %d/%d \n", v, pre[v], post[v]);

    printf("resulting DFS tree \n");
    for (v=0; v < G->V; v++)
        printf("parent of vertex %d is vertex  %d \n", v, st[v]);

}