A cool algorithm to check a Sudoku field?

前端 未结 25 1097
清酒与你
清酒与你 2021-01-30 09:19

Does anyone know a simple algorithm to check if a Sudoku-Configuration is valid? The simplest algorithm I came up with is (for a board of size n) in Pseudocode

f         


        
25条回答
  •  误落风尘
    2021-01-30 10:09

    Here is mine in C. Only pass each square once.

    int checkSudoku(int board[]) {
      int i;
      int check[13] = { 0 };
    
      for (i = 0; i < 81; i++) {
        if (i % 9 == 0) {
          check[9] = 0;
          if (i % 27 == 0) {
            check[10] = 0;
            check[11] = 0;
            check[12] = 0;
          }
        }
    
        if (check[i % 9] & (1 << board[i])) {
          return 0;
        }
        check[i % 9] |= (1 << board[i]);
    
        if (check[9] & (1 << board[i])) {
          return 0;
        }
        check[9] |= (1 << board[i]);
    
        if (i % 9 < 3) {
          if (check[10] & (1 << board[i])) {
            return 0;
          }
          check[10] |= (1 << board[i]);
        } else if (i % 9 < 6) {
          if (check[11] & (1 << board[i])) {
            return 0;
          }
          check[11] |= (1 << board[i]);
        } else {
          if (check[12] & (1 << board[i])) {
            return 0;
          }
          check[12] |= (1 << board[i]);
        }
      }
    }
    

提交回复
热议问题