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
sareste così gentili da darmi una mano?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"); } }
Grazie e cordiali saluti

Rispondi quotando