Codeforces GYM 100646E: Su-Su-Sudoku 题解
来源:互联网 发布:slam包括的算法 编辑:程序博客网 时间:2024/06/05 10:05
非常基础的搜索题
用位运算可以加速判重的过程
别忘了判断输入的部分是否有重复
#include <cstdio>#include <iostream>#include <cstring>#include <string>#include <cmath>#include <algorithm>#include <cstdlib>#include <utility>#include <map>#include <stack>#include <set>#include <vector>#include <queue>#include <deque>#define x first#define y second#define mp make_pair#define pb push_back#define LL long long#define Pair pair<int,int>#define LOWBIT(x) x & (-x)using namespace std;const int INF=0x7ffffff;inline int getk(int x,int y){int dr,dc;dr=(x+2)/3;dc=(y+2)/3;return (dr-1)*3+dc;}int rused[15],cused[15],kused[15];vector<Pair> v;int a[15][15];bool dfs(int step){if (step==6) return true;int xx=v[step-1].x,yy=v[step-1].y;int used=rused[xx]|cused[yy]|kused[getk(xx,yy)];for (int i=1;i<=9;i++){if (used&(1<<(i-1))) continue;a[xx][yy]=i;rused[xx]^=(1<<(i-1));cused[yy]^=(1<<(i-1));kused[getk(xx,yy)]^=(1<<(i-1));if (dfs(step+1)) return true;a[xx][yy]=0;rused[xx]^=(1<<(i-1));cused[yy]^=(1<<(i-1));kused[getk(xx,yy)]^=(1<<(i-1));}return false;}int main (){bool ff;int t,i,j,x;scanf("%d",&t);string s;while (t--){v.clear();memset(rused,0,sizeof(rused));memset(cused,0,sizeof(cused));memset(kused,0,sizeof(kused));ff=true;for (i=1;i<=9;i++){cin>>s;for (j=1;j<=9;j++){a[i][j]=s[j-1]-'0';//scanf("%d",&a[i][j]);x=a[i][j];if (x!=0){if (rused[i]&(1<<(x-1))){ff=false;break;}rused[i]|=(1<<(x-1));if (cused[j]&(1<<(x-1))){ff=false;break;}cused[j]|=(1<<(x-1));if (kused[getk(i,j)]&(1<<(x-1))){ff=false;break;}kused[getk(i,j)]|=(1<<(x-1));}elsev.pb(mp(i,j));}//if (!ff) break;}if (!ff){printf("Could not complete this grid.\n\n");continue;}if (dfs(1)){for (i=1;i<=9;i++){for (j=1;j<=9;j++)printf("%d",a[i][j]);printf("\n");}printf("\n");}elseprintf("Could not complete this grid.\n\n");}}
阅读全文
0 0
- Codeforces GYM 100646E: Su-Su-Sudoku 题解
- CodeForces Gym 100646E Su-Su-Sudoku
- soj 1664. Su-Su-Sudoku
- 【DFS】hdu 2780 Su-Su-Sudoku
- su
- SU
- Su
- su
- su
- su
- su
- su
- SU
- SU
- su
- su
- su
- hdu 2780 Su-Su-Sudoku(DFS数独)
- 当程序发布特别慢的时候,如何高效使用Eclipse
- VS2015编译OpenCV320的32位和64位动态库和静态库
- 选择排序和冒泡排序
- JAVA企业面试题精选 Java基础 11-20
- 安卓开发规范
- Codeforces GYM 100646E: Su-Su-Sudoku 题解
- java-包,权限修饰符
- 网站根目录权限设置
- javaweb验证码代码
- extend扩展jQuery工具方法(一)
- Web服务器工作原理概述
- Python语言基础
- spring入门到精通(一)
- 1048. Find Coins 解析