首页 > 其他 > 详细

L - 数独易

时间:2019-05-24 21:24:04      阅读:125      评论:0      收藏:0      [点我收藏+]

 

 

这是一道神奇的搜索题吗,但是与八皇后问题的记录行列的那种方法类似,不过还要记录9 * 9的小方格。之后就好解了(大嘘)。

 

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;

int sudoku[15][15] = { {0} };
bool row[15][15] = { {0} }, cln[15][15] = { {0} }, grid[15][15] = { {0} };
void put()
{
    for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 9; j++)
        {
            cout << sudoku[i][j] ;
        }
        cout << endl;
    }
}
bool done = 0;
void dfs(const int x,const int y)
{
    if (done) return ;
    if (x >= 9) { put(); done = true; return ; }
    if (sudoku[x][y]) dfs(x + y/8,(y + 1) % 9);
    else {
        for (int i = 1; i <= 9; i++)
        {
            if (!row[x][i] && !cln[y][i] && !grid[x/3 * 3 + y/3][i])
            {
                //cout << i << endl;cout << x << " " << y << endl;
                row[x ][i] = cln[y ][i] = grid[x / 3 * 3 + y / 3][i] = true;
                sudoku[x][y] = i;
                dfs(x + y / 8,(y + 1) % 9);
                sudoku[x][y] = 0;
                row[x ][i] = cln[y ][i] = grid[x / 3 * 3 + y / 3][i] = false;
            }
        }
    }
    return ;
}


int main()
{
    int t; cin >> t;
    while (t--)
    {
        done = 0;
        memset(row, 0, sizeof(row));
        memset(cln, 0, sizeof(cln));
        memset(grid, 0, sizeof(grid));
        for (int i = 0; i < 9; i++)
        {
            for (int j = 0; j < 9; j++)
            {
                //cout << i << " " << j << endl;
                scanf("%1d",&sudoku[i][j]);
                if (sudoku[i][j])
                {
                    row[i][sudoku[i][j]] = true;
                    cln[j][sudoku[i][j]] = true;
                    grid[i / 3 * 3 + j / 3][sudoku[i][j]] = true;
                }
            }
        }
        dfs(0, 0);
        

    }
    return 0;
}

最后要说的一点是i / 3 * 3 + j / 3 或 x / 3 * 3 + y / 3的含义,记录第几个小方格放了1~9的那几个数。

最后,找到答案就全力返回,找到的一定就是答案。

L - 数独易

原文:https://www.cnblogs.com/cuizhihui/p/10920042.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!