0
OK 그래서 스도쿠 (Sudoku) 솔버를 프로그래밍했습니다 .. 그리고 디버그를 실행하여 모든 것을 통과하는지 확인하십시오 ..하지만 .. 작동하지 않는 것 같습니다. 그것은 그것을 출력 할 것이고, "." 0으로 그러나 그것이가는 한 그것은 thats 다. 0으로 바뀌지 않습니다. 숫자가 반복 될 때 숫자로 바뀝니다.스도쿠 (Sudoku) 솔버 Java
public class SudokuSolver {
int[][] sudoku;
String data;
public SudokuSolver()
{
getPuzzle();
solvePuzzle(0,0);
}
private void getPuzzle()
{
try
{
Scanner in = new Scanner(new File("C:/Users/Ben/workspace/Sudoku Solver/src/puzzle1.txt"));
sudoku = new int[9][9];
for(int y = 0; y<9;y++)
{
for(int x = 0; x<9; x++)
{
data = in.next();
if(data.equals("."))
sudoku[x][y]=0;
else
sudoku[x][y] = Integer.parseInt(data);
}
}
in.close();
}
catch(Exception e)
{
}
for(int y = 0; y<9; y++)
{
for(int x = 0; x<9; x++)
{
System.out.print(sudoku[x][y]);
if(x ==2 || x ==5)
System.out.print(" ");
if(x==8)
{
System.out.print("\n");
}
}
if(y == 2|| y == 5)
{
System.out.println(" ");
}
}
}
private boolean isValid(int x, int y, int num)
{
int xSection = x/3;
int ySection = y/3;
for (int row = 0; row < sudoku.length; row++)
{
if(sudoku[row][y] == num)
{
return false;
}
}
for(int col = 0; col < sudoku.length; col++)
{
if(sudoku[x][col] == num)
{
return false;
}
}
for(int box = 3*xSection; box < 3*xSection + 3; box++)
{
for(int boxY = 3*ySection; boxY < 3*ySection + 3; boxY++)
{
if(sudoku[box][boxY] == num)
{
return false;
}
}
}
return true;
}
private int xPosition(int x, int y)
{
if(x<8)
{
return x+1;
}
else
{
return 0;
}
}
private int yPosition(int x, int y)
{
if(x<8)
{
return y;
}
else
{
return y+1;
}
}
private boolean solvePuzzle(int x, int y)
{
if(x >= 9 || y >= 9)
{
return true;
}
else
{
for(int num = 1; num < 10; num++)
{
if(isValid(x,y,num))
{
sudoku[x][y] = num;
if(solvePuzzle(xPosition(x,y), yPosition(x,y)))
{
return true;
}
else
{
sudoku[x][y] = 0;
}
}
}
return false;
}
}
public static void main(String args[])
{
SudokuSolver solver = new SudokuSolver();
}
}
그래서 모든 코드를 디버깅하도록 요청하고 있습니까? –
전혀 아닙니다. Im은 당신이 시각적으로 문제를 볼 수 있는지 묻습니다. 그리고 그것이 어디에 있는지에 관해 나에게 암시를 남겨주세요. 시각적으로 볼 수없는 것보다 나는 다른 것을 계속 노력할 필요가 있습니다. –