Recursividad de matrices

Iniciado por jonicio96, 29 Marzo 2014, 01:24 AM

0 Miembros y 1 Visitante están viendo este tema.

jonicio96


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

using namespace std;
int main(){
int m,n,i,j;
int A[50][50];
char b;
    cout << "Ingrese el Tamano de la matriz :";
    cin>>m>>b>>n;
    /*-----------FORMAR MATRIZ-------------------------*/
               for ( i= 1; i<=m ; i++){
cout<< "Ingrese la fila: "<< i <<"\n";
for ( j = 1; j <=n ; j++){
cin >> A[i][j];
}
}
/*-------------MOSTRAR MATRIZ--------------------------*/
       cout<<"\n   Matriz A:   \n";
       {
       for(i=1;i<=m;i++)
       {
       for(j=1;j<=n;j++)
       {
       cout<<"\t"<<A[i][j];
       }
       cout<<"\n";
       }
       cout<<"\n";
       }

/*---------------------------------------------------------*/       

   return 0;
}


Eso es lo que he logrado hasta ahora, pero en el ejercicio original me piden lo sgte
http://prntscr.com/350v3r] No felices con eso ahora dicen que también es posible usar esta propiedad para encontrar el camino mas corto http://prntscr.com/350vdp. Los movimientos permitidos son http://prntscr.com/350vng No busco que me hagan la tarea sino que me ayuden por favor a ver la recursividad que hasta ahora no la logro entender. Muchas gracias

eferion

No mezcles C (los includes con .h) con C++ (los includes sin .h). O usas una librería o usas la otra, pero mezclar las dos no compensa y da problemas.

Estás presuponiendo que el usuario va a introducir dos números inferiores a 50 para crear la matriz... eso deberías protegerlo un poco.

Para rellenar la matriz casi sería más sencillo un bucle doble ( i, j ) para recorrer todo el rango de filasxcolumnas y preguntarle al usuario directamente por el valor de la celda i-j. Así te aseguras que no queden celdas sin valor asignado.

Con los dibujos que muestras, intuyo que el desplazamiento puede ser en horizontal y en diagonal... pero estaría bien aclarar ese concepto. Yo presupongo que es así.

La idea es sencilla. Para la primera columna, localiza la celda con el valor más bajo y te quedas con su fila. La recursividad consiste en una función que dada una fila y una columna, busque el valor más bajo en la columna siguiente para el rango de filas ( f-1, f+1) y vuelta a empezar hasta que llegues al final de la matriz.

La mejora es simplemente que si f-1 o f+1 se sale de la matriz entonces buscas en el otro extremo de la columna correspondiente.

jonicio96

Muchas gracias ahora tengo esta idea me falta llevarla a la practica.
/*---------------------CAMINO MAS CORTO------------------------------------*/
int min=100;
for(j=1;j<=n;j++){

for(i=1;i<=m;i++){
    if (A[i][j] < min)min=A[i][j];
    cout<<min<<"\n";
        }
        }
/*
Extremo Superior
caso1 [i][j+1]
caso2 [i+1][j+1]
caso3 [m][j+1]

Extremo Inferior
caso1 [m][j+1]
caso2 [m-1][j+1]
caso3 [1][j+1]

Medio
caso1 [i][j+1]
caso2 [i-1][j+1]
caso3 [i+1][j+1]
*/