2016-10-07 9 views
-5

나는 프로그래밍에 익숙하지 않고 자신을 가르치려고 노력하고 있습니다.Java :이 프로그램을 어떻게 실행합니까?

나는이 Sudoku 해결 알고리즘을 온라인으로 찾았지만 실행할 수없는 것 같습니다. 저는 메인 메서드를 만들어야한다고 생각합니다. 그러나 내부 매개 변수와 다른 메서드를 호출하는 방법을 모릅니다.

누군가 내가 할 수있는 것을 보여줄 수 있습니까? 감사! :)

public class Sudoku { 
    private static int mBoard[][]; 
    private static int mBoardSize = 9; 
    private static int mBoxSize = 3; 
    private boolean mRowSubset[][]; 
    private boolean mColSubset[][]; 
    private boolean mBoxSubset[][]; 

    public Sudoku(int board[][]) { 
    mBoard = board; 
    mBoardSize = mBoard.length; 
    mBoxSize = (int) Math.sqrt(mBoardSize); 
    } 

    public void initSubsets() { 
    mRowSubset = new boolean[mBoardSize][mBoardSize]; 
    mColSubset = new boolean[mBoardSize][mBoardSize]; 
    mBoxSubset = new boolean[mBoardSize][mBoardSize]; 
    for (int i = 0; i < mBoard.length; i++) { 
     for (int j = 0; j < mBoard.length; j++) { 
     int value = mBoard[i][j]; 
     if (value != 0) { 
      setSubsetValue(i, j, value, true); 
     } 
     } 
    } 
    } 

    private void setSubsetValue(int i, int j, int value, boolean present) { 
    mRowSubset[i][value - 1] = present; 
    mColSubset[j][value - 1] = present; 
    mBoxSubset[computeBoxNo(i, j)][value - 1] = present; 
    } 

    public boolean solve() { 
    return solve(0, 0); 
    } 

    public boolean solve(int i, int j) { 
    if (i == mBoardSize) { 
     i = 0; 
     if (++j == mBoardSize) { 
     return true; 
     } 
    } 
    if (mBoard[i][j] != 0) { 
     return solve(i + 1, j); 
    } 
    for (int value = 1; value <= mBoardSize; value++) { 
     if (isValid(i, j, value)) { 
     mBoard[i][j] = value; 
     setSubsetValue(i, j, value, true); 
     if (solve(i + 1, j)) { 
      return true; 
     } 
     setSubsetValue(i, j, value, false); 
     } 
    } 

    mBoard[i][j] = 0; 
    return false; 
    } 

    private boolean isValid(int i, int j, int val) { 
    val--; 
    boolean isPresent = mRowSubset[i][val] || mColSubset[j][val] || mBoxSubset[computeBoxNo(i, j)][val]; 
    return !isPresent; 
    } 

    private int computeBoxNo(int i, int j) { 
    int boxRow = i/mBoxSize; 
    int boxCol = j/mBoxSize; 
    return boxRow * mBoxSize + boxCol; 
    } 

    public void print() { 
    for (int i = 0; i < mBoardSize; i++) { 
     if (i % mBoxSize == 0) { 
     System.out.println(" -----------------------"); 
     } 
     for (int j = 0; j < mBoardSize; j++) { 
     if (j % mBoxSize == 0) { 
      System.out.print("| "); 
     } 
     System.out.print(mBoard[i][j] != 0 ? ((Object) (Integer.valueOf(mBoard[i][j]))) : " "); 
     System.out.print(' '); 
     } 

     System.out.println("|"); 
    } 

    System.out.println(" -----------------------"); 
    } 

    public static void main(String[] args) { 
    Sudoku sudoku = new Sudoku(mBoard); 

    } 
} 
+0

나는 아직하지 않은 - I 메인 방법을 초기화하지 말아야을? – Mimi

+4

프로그래밍에 익숙하지 않고 스도쿠를 해결하는 AI 알고리즘을 배우기 시작하셨습니까? –

+2

초보자 인 분, 왜 세계 스타일의 프로그램이 아니라 스도쿠 같은 복잡한 프로그램을 만드나요? –

답변

0

당신은 그런 일 (당신이 크기 값을 변경해야합니까?) 시도 할 수 있습니다 :

public static void main(String[] args) 
{ 
    //list of rows, where each row has 4 values 
    int[][] board = new int[][] { {2,3,1,1}, {1,2,1,1},{2,3,3,3}, {4,2,3,3}}; 
    Sudoku sudoku = new Sudoku(board); 
    sudoku.solve(); 
    sudoku.print(); 
}