Un cuadrado latino es una matriz de n×n elementos, en la que cada casilla está ocupada por uno de los n símbolos de tal modo que cada uno de ellos aparece exactamente una vez en cada columna y en cada fila.
Ejemplos de cuadrado latino:
El profesor de la asignatura de Estructuras de Datos, como desafío personal y a modo de practicar para comprender el concepto de recursividad, nos instó a realizar un programa que resolviera el problema de las "8 reinas" o el "cuadrado latino". Hice el segundo y a continuación les dejo el resultado, pero, te sugiero que lo intentes hacer tú primero.//Algoritmo: Cuadrado Latino.
//Autor: John Salazar C.
#include stdio.h
#define max 10
int resuelve(int vector[],int L1,int L2,int L3,int L4);
int main(void){
int vector[max],i=0,n,a1,a2,a3,a4;
printf("CUADRADO LATINO CON RECURSIVIDAD\n");
printf("Introduzca cantidad elementos: ");
scanf("%d",&n);
printf("Ingrese los elementos (distintos): \n");
for(i=0;i
}
a1=0;
a2=n-1;
a3=n;
a4=n-1;
resuelve(vector,a1,a2,a3,a4);
return(0);
}
int resuelve(int vector[],int L1,int L2,int L3,int L4){
if(L2>=0){
if(L1==L2&&L3>L4){
printf("\t%d",vector[L1]);
printf("\n");
L1=0;
L3=L2;
L2--;
return resuelve(vector,L1,L2,L3,L4);
}
if(L3<=L4){
printf("\t%d",vector[L3]);
L3++;
return resuelve(vector,L1,L2,L3,L4);
}else{
printf("\t%d",vector[L1]);
L1++;
return resuelve(vector,L1,L2,L3,L4);
}
}
return(0);
}
Clave:
para cada línea de la matríz, ocurren 2 ciclos:
ciclo 1: desde L1 a L2
ciclo 2: desde L3 a L4
Para la primera linea, el ciclo 2 no participa.
3 comentarios:
Hola... esa definicion de cuadrado latino me recuerda al juego sudoku... hace 1 par de años implementé un algoritmo para solucionar sudokus usando recursividad... puedes encontrarlo visitando http://infnato.blogspot.com
Lo colgare en 2 dias maximo...
Un saludo!
Hola!
Me resulta muy útil este código, porque es muy limpio, pero veo que está incompleto.
En la sentencia del for: printf("Ingrese los elementos (distintos): \n");
for(i=0;i
scanf("%d",&vector[i]);
Ya ves que la sentencia del for está incompleta. ¿Podrías poner como es la solución completa?
Gracias de antemano.
PAQUI
Paqui,
Esta es la línea que está incompleta:
for(i=0;i(menor que)n;i++){
Espero te sirva.
Saludos,
Publicar un comentario