Programa Java se ejecuta infinitamente sin causa-n Stackoverflow pero nunca se termina el programa - generador de Sudoku

d0rf47:

Estoy trabajando en tratar de construir un generador de Sudoku básica en Java 9+.

El Código funciona aparentemente bien hasta un punto aleatorio en el que deja de devolver un nuevo número, sin embargo la función de generar el número aleatorio no todavía producir los números como Probé con un registro. Pero alcanza un determinado dígito y sólo se detiene la impresión. No puedo entender por qué. Soy muy nuevo a los algoritmos y dar marcha atrás por lo que cualquier idea de que se puede brindar es apreciado.

código de abajo

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

class Scratch_5
{

    static boolean safe = true;
    static int[][] grid = new int[9][9];
    public static void main(String[] args)
    {
        for(int i = 0; i < grid.length; i++)
        {
            for(int j = 0; j < grid[i].length; j++)
            {
                int temp = 0;
                do
                {
                    temp = getNumber();
                }while (!noConflict(grid, i, j, temp));
                grid[i][j] = temp;
                System.out.print(grid[i][j] + " ");
            }
            System.out.println();
        }

    }

    static int getNumber()
    {
        Random r = new Random();

        int temp = 0;
        temp = r.nextInt(10-0);
        return temp;
    }
    public static boolean noConflict(int[][] array, int row, int col, int num) {

        for (int i = 0; i < 9; i++) {
            if (array[row][i] == num) {
                return false;
            }
            if (array[i][col] == num) {
                return false;
            }
        }

        int gridRow = row - (row % 3);
        int gridColumn = col - (col % 3);
        for (int p = gridRow; p < gridRow + 3; p++) {
            for (int q = gridColumn; q < gridColumn + 3; q++) {
                if (array[p][q] == num) {
                    return false;
                }
            }
        }
        return true;
    }
}

Gracias.

maraca:

Su lógica es defectuosa. Va a crear configuraciones que no se puede completar, por lo que será atrapado en el bucle Do While. Permítanme demostrar esto con un ejemplo sencillo:

1 2 3 4 5 6 7 8 9
4 5 6 1 2 3 . . .

Cualquiera de las posiciones con un punto no puede ser llenado, porque ya hay un 7, 8 o 9 en la caja.

Se podría escribir un solucionador de sudokus, a continuación, colocar números al azar en la red y trata de resolverlo. Tan pronto como hay una solución única (Esto se puede comprobar mediante la resolución de la parte inferior, intente 1 entonces 2 a continuación, 3 y así sucesivamente y de la prueba superior 9 primero entonces 8 a continuación, 7 y así sucesivamente, si las 2 soluciones son coincidentes se es única), que tiene un sudoku (no un resolvió uno como el que usted está tratando de generar).

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=341689&siteId=1
Recomendado
Clasificación