Leetcode-Sudoku Solver

来源:互联网 发布:js把date转换成字符串 编辑:程序博客网 时间:2024/06/07 07:08

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.

这里写图片描述

...and its solution numbers marked in red.
题意:将一个数独补充完整。
解题思路:从第一个空格开始,列出可以填充的数字,依次进行尝试。

bool ss(vector<vector<char>>& b){    int ii = 0;    int jj = 0;    bool f = false;    for (int i = 0; i < b.size(); ++i)    {        for (int j = 0; j < b[i].size(); ++j)        {            if (b[i][j] == '.')            {                ii = i;                jj = j;                f = true;                break;            }        }        if (f)        {            break;        }    }    if (f)    {        int a[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };        for (int i = 0; i < b[0].size(); ++i)        {            if (b[ii][i] != '.')            {                a[b[ii][i] - '0']++;            }            if (b[i][jj] != '.')            {                a[b[i][jj] - '0']++;            }        }        int ib = ii / 3;        ib=ib*3;        int jb = jj / 3;        jb=jb*3;        for (int i = ib; i < ib + 3; ++i)        {            for (int j = jb; j < jb + 3; ++j)            {                if (b[i][j] != '.')                {                    a[b[i][j] - '0']++;                }            }        }        for (int i = 1; i < 10; ++i)        {            if (a[i] == 0)            {                b[ii][jj] = i + '0';                if (ss(b))                {                    return true;                }                else                {                    b[ii][jj] = '.';                }            }        }        return false;    }    return true;}    void solveSudoku(vector<vector<char>>& board) {        bool f=ss(board);    }
0 0