Salve, ho implementato un codice per costruire una matrice di adiacenze di un grafo non orientato rappresentante un labirinto che intendevo visitare con l'algoritmo DFS... a questo punto ho fatto delle ricerche su quest' algoritmo ma sono riuscito a trovare solo funzione ricorsive su liste multiple mentre io volevo implementarlo iterativamente sulla matrice...
avrei bisogno di una spiegazione su come visitare i vari nodi a partire dalla matrice e di come implementare l'algoritmo in maniera iterativa...

il codice per formare la matrice è questo

codice:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

/*Scrivere function C per la visita di un grafo mediante l’algoritmo Depth First Search iterativo.
Applicare l’algoritmo al grafo che descrive il seguente labirinto per determinare un cammino
che parte dall’ingresso A e termina nell’uscita Q. */

typedef struct
{
 char a;
 char v;
}elem;

elem** trimatrix(int);
void   visualmat(int,elem**);

int main ()
{
   elem **m;
   m=trimatrix(27);
   (m[1][0]).a=1;(m[2][1]).a=1;(m[3][0]).a=1;(m[3][1]).a=1;(m[4][3]).a=1;
   (m[5][4]).a=1;(m[6][5]).a=1;(m[7][6]).a=1;(m[8][5]).a=1;(m[10][9]).a=1;
   (m[11][7]).a=1;(m[12][8]).a=1;(m[12][11]).a=1;(m[13][11]).a=1;(m[14][13]).a=1;
   (m[15][12]).a=1;(m[15][14]).a=1;(m[16][14]).a=1;(m[17][13]).a=1;(m[18][16]).a=1;
   (m[18][17]).a=1;(m[19][17]).a=1;(m[20][16]).a=1;(m[21][20]).a=1;(m[21][19]).a=1;
   (m[22][21]).a=1;(m[24][9]).a=1;(m[24][22]).a=1;(m[24][23]).a=1;(m[25][7]).a=1;
   (m[25][20]).a=1;(m[25][23]).a=1;(m[26][0]).a=1;(m[26][1]).a=1;(m[26][10]).a=1;
   visualmat(27,m);

   return 0;
}


elem**  trimatrix(int n)
{
 /*Crea una matrice dinamica frastagliata in modo
   da risparmiare memoria allocando solo  il triangolo
   inferiore della matrice di adiacenze in virtù delle
   proprietà di simmetria dei grafi non orientati*/

   elem **matrice;
   int i;

   /*alloca un array di puntatori*/
   matrice=(elem**)calloc(n,sizeof(elem*));
   if(matrice==NULL)
   {printf("memoria insufficente!");exit(1);}

  /*inserisce i puntatori all'interno dell'array*/
   for(i=0;i<n;i++)
   {
     matrice[i]=(elem*)calloc(i+1,sizeof(elem));
     if(matrice==NULL)
     {printf("memoria insufficente!");exit(2);}
   }

   return matrice;
}

void   visualmat(int n,elem **m)
{
 /*visualizzazione classica del
   triangolo inferiore di una matrice*/

   int i,j;

   printf("\n\n--Matrice di Adiacenze--\n\n");

   for(i=0;i<n;i++)
   {
    printf("%c ",i+97);
     for(j=0;j<i+1;j++)
      printf("%d",(m[i][j]).a);
    printf("\n");
   }
}
sareste così gentili da darmi una mano?

Grazie e cordiali saluti