数独-解

来源:互联网 发布:天天聚财网网络借贷 编辑:程序博客网 时间:2024/05/17 23:03
#include <iostream>#include <vector>using namespace std;class Solution {    vector<vector<bool> > rows;    vector<vector<bool> > cols;    vector<vector<bool> > blocks;public:    void solveSudoku(vector<vector<char> > &board) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        rows.clear();        cols.clear();        blocks.clear();        rows.resize(9, vector<bool>(9, false));        cols.resize(9, vector<bool>(9, false));        blocks.resize(9, vector<bool>(9, false));        for (int i = 0; i < 9; ++i) {            for (int j = 0; j < 9; ++j) {                char c = board[i][j];                if (c != '.') {                    rows[i][c - '1'] = cols[j][c - '1'] = blocks[(i / 3) * 3 + j / 3][c - '1'] = true;                }            }        }        sub(board, 0);    }    void sub(vector<vector<char> > &board, int index) {        while (index < 81 && board[index / 9][index % 9] != '.')            index++;        if (index == 81){            for(int i=0;i<9;++i){                for(int j=0;j<9;++j){                    cout<<board[i][j];                }cout<<endl;            }cout<<endl;            return ;        }        int row = index / 9, col = index % 9;        for (int i = 0; i < 9; ++i) {            if (rows[row][i] || cols[col][i] || blocks[(row / 3) * 3 + col / 3][i]) continue;            rows[row][i] = cols[col][i] = blocks[(row / 3) * 3 + col / 3][i] = true;            board[row][col] = '1' + i;            sub(board, index + 1);            board[row][col] = '.';            rows[row][i] = cols[col][i] = blocks[(row / 3) * 3 + col / 3][i] = false;        }    }};int main(){    vector<vector<char> > board(9,vector<char>(9,'.'));    char ch[][10] ={"8........",                    "..36.....",                    ".7..9.2..",                    ".5...7...",                    "....457..",                    "...1...3.",                    "..1....68",                    "..85...1.",                    ".9....4.."                    };    for(int i=0;i<9;++i){        for(int j=0;j<9;++j){                board[i][j]=ch[i][j];            cout<<board[i][j];        }cout<<endl;    }    Solution s;    s.solveSudoku(board);    return 0;}

原创粉丝点击