37. Sudoku Solver

来源:互联网 发布:ubuntu安装maven 编辑:程序博客网 时间:2024/06/09 16:12

Write a program to solve a Sudoku puzzle by filling the empty cells.

Empty cells are indicated by the character ‘.’.

You may assume that there will be only one unique solution.

这里写图片描述

这里写图片描述

#include "SudokuSolver.h"bool SudokuSolver::check(vector<vector<char>> &board, int i, int j, char val){    //检验board[i][j]在值为val的时候是否有效    int row = i - i % 3, column = j - j % 3;    for (int x = 0; x<9; x++) if (board[x][j] == val) return false;    for (int y = 0; y<9; y++) if (board[i][y] == val) return false;    for (int x = 0; x<3; x++)        for (int y = 0; y<3; y++)            if (board[row + x][column + y] == val) return false;    return true;}bool SudokuSolver::solveSudoku(vector<vector<char>> &board, int i, int j){    if (i == 9) return true;    if (j == 9) return solveSudoku(board, i + 1, 0);    if (board[i][j] != '.') return solveSudoku(board, i, j + 1);    for (char c = '1'; c <= '9'; c++)    {        if (check(board, i, j, c))        {            board[i][j] = c;            if (solveSudoku(board, i, j + 1)) return true;            //这里若迭代后的结果不符合条件,要将该位置重新置为'.'            board[i][j] = '.';        }    }    return false;}void SudokuSolver::solveSudoku(vector<vector<char>>& board) {    solveSudoku(board, 0, 0);}
原创粉丝点击