题意:
完成数独
思路:
看到题目,这肯定是搜索,但是试了一发普通的直接就超时了,肯定要加一些剪枝和优化,首先是位运算优化可以将每一行,每一列,每一个九宫格,都利用一个九位二进制数保存,当前还有哪些数字可以填写,再一个我们肯定是从限制性最高的那个点开始填的,其实每次都是填限制最多的那个数,
涉及到一个lowbit函数:当前得需要用lowbit运算取出当前可以能填的数字.
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+10;
char mp[10][10];//二维和一维存放
int c[10],r[10],g[10];//行与列
int cnt[1100],num[1100];
int k,tot;
int lowbit(int x) {
return x&(-x);
}
int get(int x,int y) {
return ((x/3)*3)+(y/3);
}
void fun(int x,int y,