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