数独が合法かどうかを判断する

1780 ワード

           。

             ,         .   。

     

       (     )        。              。

                ? Yes
  
      ?

http://sudoku.com.au/TheRules.aspx
http://baike.baidu.com/subview/961/10842669.htm

class Solution {
public:
    /**
      * @param board: the board
      * @return: wether the Sudoku is valid
      */
    bool isValidSudoku(const vector>& board) {
        for(int i = 0;i < 9;i++) {
            for(int j = 0;j < 9;j++) {
                int cur = board[i][j];
                if (cur == '.') {
                    continue;
                }
                for(int k=0;k<9;k++) {
                    int temp = board[i][k];
                    if(temp == cur && k != j) {
                        return false;
                    }
                    
                }
                for(int k=0;k<9;k++) {
                    int temp = board[k][j];
                    if(temp == cur && k != i) {
                        return false;
                    }
                   
                }
                int n = i/3;
                int m = j/3;
                for(int p = n * 3;p < n * 3 + 3;p++) {
                    if (p == i ) {
                            continue;
                        }
                    for(int q = m * 3;q < m * 3 + 3;q++) {
                        if ( q == j) {
                            continue;
                        }
                        if(board[p][q] == cur && p != i && q != j) {
                            return false;
                        }
                    }
                }
                
            }
        }
        return true;
    }
};