sono riuscito ad arrivare a questo codice, tuttavia c'è qualcosa che non va a livello logico poiché durante la scansione l'ipotetico viaggiatore interno al labirinto (è per questo che mi serviva l'algoritmo) rimane imbottigliato per essere precisi dopo aver percorso
a->{->k->j->y->x->d->b->c->e->f->i->m->l->h si trova in posizione c dove tutti gli altri nodi adiacenti sono già stati visitati...
di seguito riporto il codice:
Funzione che visita il nodo corrente e dispone gli elementi in stack:
codice:
void visitnodo(char val,elem *nod,char **matrice,elem *stack,int *head)
{
int i=val-97,j;
nod[i].flag=1;
/*conta archi di colonna evitando l'arco cappio
che altrimenti verrebbe contato 2 volte
e li inserisce nello stack*/
for(j=i+1;j<size;j++)
if(matrice[j][i]==1);
push(stack,nod[j],head)
/*conta archi di riga considerando l'arco cappio
e li inserisce nello stack*/
for(j=0;j<i+1;j++)
if(matrice[i][j]==1)
push(stack,nod[j],head);
//for(j=0; j<*head+1; j++)//stampa a schermo lo stack
//printf("\nstack[%d] %c-%d",j,stack[j].info,stack[j].flag);
}
Funzione DFS:
codice:
void visitadfs(elem *nodi,char **matrice,elem *stack,int *head)
{
elem c;
printf(" -%c- ",nodi[0].info);
visitnodo(nodi[0].info,nodi,matrice,stack,head);
while(head!=NULL)
{
c=stack[*head];
pop(stack,head);
if(c.flag==0 && c.info!='q')
{
printf(" -%c- ",c.info);
visitnodo(c.info,nodi,matrice,stack,head);
}
}
}
Grafo - Labirinto: