/* Pontificia Universidade Catolica * Campinas - Sao Paulo - Brasil * abril/2004 * * Algoritmo de Percusso em profundidade em um grafo. * * A partir de um no inicial i, realiza-se sua visita. Em seguida um sucessor seu j, escolhido sob * algum criterio. Entao repete-se o processo considerando-se o no j com incial para depois visitar-se * os outros sucessores de i. Isto eh, visita-se o no j e todos seus sucessores e descendentes destes. * antes das visitas aos irmaos de j, ou seja, todos sucessores de i. * * Ultima atualizacao: 07/04/2004 - Cesar Kallas - cesarkallas@gmx.net * */ #define N 1 int nextsucc(int *adj, int xptr, int yptr) { yptr++; while(adj[xptr][yptr] == 0 && yptr < N) yptr++; return(yptr); } int firtsucc(int *adj, int xptr) { int yptr; yptr = nextsucc(adj, xptr, -1); return(yptr); } void dftraverse(int *adj, int xptr) { int yptr; visit(xptr); /* inseri xptr na lista de nos visitados */ yptr = firstsucc(adj, xptr); while(yptr < N) { if(!visited(yptr)) dftraverse(adj, yptr); yptr = nextsucc(adj, xptr, yptr); } }