int GRAPHpathH( Graph *G, int v, int w ) { int t; for( t = 0; t < G->V; t++ ) visited[t] = 0; return pathR( G, v, w, G->V-1 ); }
int pathR( Graph *G, int v, int w, int d ) { int t; printf("O que já foi visitado?\n"); for( t = 0; t < G->V; t++ ) printf("%d=%d, ", t, visited[t]); printf("\n"); if( v == w ) { if( d == 0 ) return 1; else return 0; } visited[v] = 1; /// Erro aqui. Rever o livro. for( t = 0; t < G->V; t++ ) if( G->adj[v][t] == 1 ) if( visited[t] == 0 ) if( pathR( G, t, w, d-1 ) ){ printf("%d-> ", t ); return 1; } visited[v] = 0; return 0; }
/*função básica*/ void pathR(Digraph G, Vertex v){ Vertex w; lbl[v] = 0; for (w = 0; w < G->V; w++) if (G->adj[v][w] == 1) if (lbl[w] == -1){ parnt[w] = v; pathR(G, w); } }
void pathR(Digraph G, Vertex v){ link n; lbl[v] = 0; for(n = G->adj[v]; n != NULL; n = n->next) if(lbl[n->w] == -1){ parnt[n->w] = v; pathR(G, n->w); } }
int DIGRAPHpath(Digraph G, Vertex s, Vertex t){ lblReset(); pathR(G,s); if(lbl[t] == -1){ return 0; }else{ return 1; } }
void pathR(Digraph G, Vertex v){ int i; lbl[v] = 1; for(i = 0; i < G->V; i++){ if(G->adj[v][i] == 1 && lbl[i] == -1){ pathR(G, i); } } }
/*Func que procura caminho de v-->w */ int DIGRAPHpath(Digraph G, Vertex s, Vertex t){ Vertex v; for(v=0; v<G->V; v++){ lbl[v]=0; parnt[v]=-1; } /* lbl[v]=-1; pathR(G,s); return lbl[t]!=-1;*/ parnt[s] = s; return pathR(G,s,t); }
/*Resolucao do professor para pathR parando ao encontrar t*/ int pathR(Digraph G, Vertex v, Vertex t){ Vertex w; lbl[v] = 1; if(v==t) return 1; for(w = 0; w<G->V; w++) if(G->adj[v][w] && !lbl[w]){ parnt[w] = v; if (pathR(G, w, t)) return 1; } return 0; }
/*função básica*/ int DIGRAPHpath(Digraph G, Vertex s, Vertex t){ Vertex v; for (v = 0; v < G->V; v++){ lbl[v] = -1; parnt[v] = -1; } parnt[s] = s; pathR(G, s); if (lbl[t] == -1) return 0; else return 1; }
int DIGRAPHpath(Digraph G, Vertex s, Vertex t) { Vertex v; for (v = 0; v < G->V; v++) lbl[v] = -1; pathR(G,s); if (lbl[t] == -1) return 0; return 1; }
int DIGRAPHpath(Digraph G, Vertex s, Vertex t) { Vertex v; for(v = 0; v < G->V; v++) { lbl[v] = 0; parnt[v] = -1; } parnt[s] = s; pathR(G,s); return lbl[t]; }
/*função básica - modificada*/ void pathR2(Digraph G, Vertex v, Vertex t){ Vertex w; lbl[v] = 0; for (w = 0; w < G->V; w++) if ( w == t) { lbl[w] = 0; break; } else { if (G->adj[v][w] == 1) if (lbl[w] == -1){ parnt[w] = v; pathR(G, w); } } }
int DIGRAPHpath(Digraph G, Vertex s, Vertex t){ int i; for(i = 0; i < G->V; i++){ lbl[i] = -1; } pathR(G,s); if(lbl[t] == -1){ return 0; }else{ return 1; } }