Open IgnacioAnd opened 1 month ago
si das vuelta algunos de tus ifs te queda menos indentado. mas facil de leer, nota que si tengo un return en un if no hace falta poner el else en vez de
if (aux[m[i][col]-1] == 0){
aux[m[i][col]-1]++;
}else {
return 1;
}
podes hacer
if (aux[m[i][col]-1] != 0){
return 0;
}
aux[m[i][col]-1]++;
Este patron se repite varias veces
Aca tenes un error. si entra al primer if no revisa ni esa fila ni esa columna ni ese cuadro -> para i = 0, 3 o 6 no verifica
int sudokuSolver(char m[][DIM]){
int num;
for (int i = 0; i<DIM; i++){
if ((i%3) == 0){
num = i;
}else if (verificaFila(m[i])){
return 0;
}else if (verificaCol(m,i)){
return 0;
}else if (verificaCuadro(m, num, (i%3)*3)){
return 0;
}
}
return 1;
}
Lo de modificar los primeros ifs lo habia intentado y me daba error. Pero no entendi lo ultimo.
Con ese primer if lo unico que hago es tener bien los numeros para la funcion verificaCuadro. Porque necesito que sea 0, 3 o 6
si entra al if, no entra a los else....
ademas seria mas logico que las funciones de verificacion retornen 0 en caso de fallo y 1 en caso de exito
lo que queres hacer es esto entonces?
int sudokuSolver(char m[][DIM]){
int num;
for (int i = 0; i<DIM; i++){
if (verificaFila(m[i]) || verificaCol(m,i) || verificaCuadro(m, i%3, (i%3)*3)){
return 0;
}
}
return 1;
}
Ok ya entendi Tengo que sacar los else de esa funcion entonces, solo los dejo con ifs. Y lo de que retorne 0 si falla y 1 si no, no es lo mismo?
Lo del return si, son convenciones. Para que sea mas facil de leer seria esperable que se comporte segun la convencion. Despues ademas en todos los if retornabas 0. Si comparten comportamiento, porque no unir la condicion para no tener 3 return
No porque esto lo que hace es que a la funcion verifica cuadro le pasa 0, 1 o2. y yo necesito 0, 3 o 6.
int sudokuSolver(char m[][DIM]){
int num;
for (int i = 0; i<DIM; i++){
if (verificaFila(m[i]) || verificaCol(m,i) || verificaCuadro(m, i%3, (i%3)*3)){
return 0;
}
}
return 1;
}
Dale uno los 3 ifs, pero el primero tiene que quedar igual. Porque asi puedo pasar los parametros 0, 3 y 6
Te lo pase mal antes, hacelo asi:
int sudokuSolver(char m[][DIM]){
int num;
for (int i = 0; i<DIM; i++){
if (verificaFila(m[i]) || verificaCol(m,i) || verificaCuadro(m, (i/3) * 3, (i%3)*3)){
return 0;
}
}
return 1;
}
Ahi lo pruebo
Funciono Perfecto Gracias
:D
Buenos días, me gustaría saber si el código es correcto.