C++ leetCode 37. 解數獨 編寫一個程序,通過已填充的空格來解決數獨問題。

bool check(int &n, char ch, vector<vector<char>> &board) {
	int row = n / 9;
	int col = n % 9;
	for (int i = 0; i < 9; i++) {
		if (board[row][i] == ch || board[i][col] == ch)
			return false;
	}

	int rowApp = row / 3;
	int colApp = col / 3;
	for (int i = 0; i < 3; i++)
		for (int j = 0; j < 3; j++) {
			int rowNew = i + rowApp * 3;
			int colNew = j + colApp * 3;
			if (board[rowNew][colNew] == ch && !(rowNew == row && colNew == col)) {
				return false;
			}
		}
	return true;
}

bool DFS(vector<vector<char>>& board, int n) {
	if (n == 81) {
		return true;
	}
	int row = n / 9;
	int col = n % 9;
	if (board[row][col] != '.') {
		return DFS(board, n + 1);
	}
	else
		for (int k = 1; k < 10; k++) {
			if (check(n, k + '0', board)) {
				board[row][col] = k + '0';
				if (DFS(board, n + 1))
					return true;
				board[row][col] = '.';
			}
		}
	return false;
}

void solveSudoku(vector<vector<char>>& board) {
	DFS(board, 0);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章