estoy haciendo un programa que busque cualquier camino para un laberinto y que imprima la solución por pantalla hasta ahí todo bien pero tengo que buscar la solución con grafos y ni idea como crear la matriz de adyacencia a partir de mi matriz enumerada para poder leer el grafo con el algoritmo de djisktra.
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
int filas, columnas;
int num = 0;
int V;
int ** Grafo;
/****************************************************Firmas********************************************************************/
void Imprimir();
int Modificar();
int **DaMemoriaGrafo();
/*Fin firmas*/
void Lectura(){
FILE *Archivo;
int i,j; //Filas,Columnas
int fil = -1;
int col = -1;
int salf = -1; // Coordenadas S
int salc = -1; // Coordenadas S
char c;
int **Laberinto;
char **Aux;
Archivo
= fopen("datos.txt","r"); fscanf(Archivo
,"%d", &filas
); //Se leen el numero de filas fscanf(Archivo
,"%d\n", &columnas
); //Se leen el numero de columnas //printf("%d %d",filas,columnas);
V = filas + columnas;
Laberinto
= (int **)malloc(filas
*sizeof(int*)); //Matriz que contendra el mapa de los nodos. for(i = 0; i<filas; i++){
Laberinto
[i
] = (int*)malloc(columnas
*sizeof(int)); }
Aux
= (char **)malloc(filas
*sizeof(char*)); //Matriz que contiene el Laberinto original. for(i = 0; i<filas; i++){
Aux
[i
] = (char*)malloc(columnas
*sizeof(char)); }
Grafo = DaMemoriaGrafo(V); // se
for(i = 0; i<filas; i++){
for(j = 0; j<columnas; j++){
Aux[i][j] = c;
if(c == '#'){ //Convertimos la matriz en 0 y 1.
Laberinto[i][j] = -1; //1 si es una pared.
}else{
Laberinto[i][j] = 0; //0 si es un espacio vacio.
}
if(c == 'E'){ //Recuperamos la posicion de la entrada.
fil = i;
col = j;
}
}
}
if((fil == -1)&&(col == -1)){
printf("\nNo existe ninguna entrada para el laberinto\n"); }
Imprimir(Laberinto);
Modificar(Laberinto);
Crear_grafo(V,Laberinto,Grafo);
Imprimir(Laberinto);
printf("%d", num
); //Cantidad de nodos.
}
void Imprimir(int** Laberinto){
int i,j;
for(i = 0; i<filas;i++){
for(j = 0; j<columnas;j++){
printf("%d", Laberinto
[i
][j
]); }
}
}
int Modificar(int** Laberinto){
int i,j;
for(i = 0; i<filas;i++){
for(j = 0; j<columnas;j++){
if(Laberinto[i][j] == 0){
Laberinto[i][j] = num;
num++;
}
}
}
}
int Crear_grafo(int V, int ** lab, int ** Grafo){
int i, j, id = 0;
for(i = 1; i<V; i++){
for(j = 1; j<V; j++){
Grafo[i][j] = 0;
/*if(lab[i][j] > id || lab[i+1][j] > id || lab[i][j+1] > id || lab[i-1][j] > id || lab[i][j-1] > id){
Grafo[i][j] = 1;
Grafo[j][i] = 1;
id++;*/
}
}
}
}
int **DaMemoriaGrafo(int n){
int **aux;
int i;
aux
= (int **)malloc(n
*(sizeof(int *))); if (!aux)
{
printf("\nNo hay memoria suficiente."); }
for(i=0;i<n;i++)
{
aux
[i
] = (int *)malloc(n
*(sizeof(int))); if (!aux[i])
{
printf("\nNo hay memoria suficiente."); }
}
return aux;
}
int main(){
Lectura();
return 0;
}