Anuncio

Colapsar
No hay ningún anuncio todavía.

Comprobar sudoku

Colapsar
X
 
  • Filtro
  • Hora
  • Mostrar
Borrar todo
nuevos mensajes

  • Matlab Comprobar sudoku

    Buenas! Estoy intentando terminar un programa que responde al siguiente enunciado:

    "Sea un sudoku semi-lleno que se considera inicialmente correcto. Sea n un valor del 1 al 9 introducido por el usuario. Sean f y c las coordenadas de una posición del sudoku. A esta posición irá a parar el valor n introducido. Se trata de comprobar si la fila f, la columna n, y la submatriz a la que pertenece n, cumplen con los requisitos de que no se repita ningún número del 1 al 9. la función recibe como argumentos la matriz 9x9, M, la fila f, la columna c, y el número n."

    Bueno, pues yo no tengo problemas para comprobar la fila y la columna de n. Pero tengo grandes problemas a la hora de intentar seleccionar o "aislar" la submatriz a la que pertenece. ¿Cómo puedo hacerlo?

    PD: Un compañero de la otra clase dijo que el profesor resolvió el problema de la submatriz así:

    Código:
    fil_submat=floor((f-1)/3)*3+1;
    col_submat=floor((f-1)/3)*3+1;
     
    for i=fil_submat:fil_submat+2
        for j=col_submat:col_submat+2
            if M(i,j)==n && (i~=f || j~=c)
                r=0;
                return;
            end
        end
    end
    Pero no sé para qué sirve la función "floor" ni por qué la usó ahí.

    Espero vuestra ayuda, a ver si mañana me sale un buen examen :P

    Gracias a todos!

    Un saludo.
    Última edición por skinner; 05/06/2011, 23:38:37.

  • #2
    Re: Comprobar sudoku

    La función floor (piso en inglés) te permite determinar el mayor entero menor o igual que el argumento de la función: [FONT=Fixedsys]floor(3.4) = 3, floor(3.9) = 3, floor(4) = 4, floor(-3.4) = -4[/FONT].

    Si tu tienes una matriz de 9x9, estará subdividida en 9 cuadritos de 3x3. Si te imaginas una hoja de cálculo, el primer cuadrito ocupa las filas 1-3 y las columnas 1-3, el cuadrito inmediatamente abajo ocupa las filas 4-6 y el tercer cuadrito hacia abajo ocupa las filas 7-9. La operación convierte el valor en los valores , es decir, el valor de la primera fila del cuadrito. Compruébalo tu mismo dándole valores a . Algo similar aplica a las columnas.

    Lo que no veo en el fragmento de programa que pusiste es que estén haciendo bien la definición de [FONT=Fixedsys]col_submat[/FONT], a menos que tu la hayas tipeado mal y hayas cambiado la [FONT=Fixedsys]c[/FONT] por una [FONT=Fixedsys]f[/FONT].

    Entonces, recapitulando, asumiendo que el programa dijera:

    [FONT=Fixedsys]fil_submat=floor((f-1)/3)*3+1;[/FONT]
    [FONT=Fixedsys]col_submat=floor((c-1)/3)*3+1;[/FONT]

    [FONT=Fixedsys]fil_submat[/FONT] y [FONT=Fixedsys]col_submat[/FONT] serían, respectivamente, la fila y columna de la esquina superior izquierda del cuadrito que contiene la fila [FONT=Fixedsys]f[/FONT] y la columna [FONT=Fixedsys]c[/FONT] y lo que estaría haciendo el segmento que pones es trabajar con la submatriz que corresponde ese cuadrito.

    Saludos,

    Al
    Don't wrestle with a pig in the mud. You'll both get dirty, but the pig will enjoy it. - Parafraseando a George Bernard Shaw

    Comentario


    • #3
      Re: Comprobar sudoku

      Gracias! El examen no me salió mal del todo. Ppor desgracia llevé flojo la parte de encriptación y por tanto es en lo único que he fallado...

      Saludos!

      Comentario

      Contenido relacionado

      Colapsar

      Trabajando...
      X