bzoj 3109: [cqoi2013]新数独
2016-03-22 23:04
531 查看
#include<cstdio> #include<iostream> using namespace std; int ha[10][10],li[10][10],xi[10][10],a[10][10],bh[10][10],bl[10][10],kg; char ch[5]; bool pan(int x,int y,int i) { if(ha[x][i]||li[y][i]||xi[(x-1)/3*3+(y-1)/3][i]) return 0; if((y-1)%3!=0&&(bh[x][y]^(i>a[x][y-1]))) return 0; if((x-1)%3!=0&&(bl[x][y]^(i>a[x-1][y]))) return 0; return 1; } void dfs(int x,int y) { //if(a[1][1]==4&&a[1][2]==9&&a[1][3]==1&&a[1][4]==7&&a[1][5]==3&&a[1][6]==6&&a[1][7]==5&&a[1][8]==2) //{ //printf(" "); //} if(kg) return; if(y==10) { x++; y=1; } if(x==10) { kg=1; for(int i=1;i<=9;i++) { for(int j=1;j<=9;j++) { printf("%d",a[i][j]); if(j!=9) printf(" "); } printf("\n"); } return; } for(int i=1;i<=9;i++) if(pan(x,y,i)) { a[x][y]=i; ha[x][i]=1; li[y][i]=1; xi[(x-1)/3*3+(y-1)/3][i]=1; dfs(x,y+1); ha[x][i]=0; li[y][i]=0; xi[(x-1)/3*3+(y-1)/3][i]=0; } } int main() { for(int i=1;i<=9;i++) { for(int j=1;j<9;j++) if(j%3) { scanf("%s",ch); if(ch[0]=='<') bh[i][j+1]=1; else bh[i][j+1]=0; } if(i%3) for(int j=1;j<=9;j++) { scanf("%s",ch); if(ch[0]=='^') bl[i+1][j]=1; else bl[i+1][j]=0; } } dfs(1,1); return 0; }
一个非常恶心的搜索。
相关文章推荐
- svn 插件安装
- 多达 95% 的 HTTPS 链接能被黑客劫持
- 稀疏矩阵算余弦相似度
- C++ 多线程计时的bug,千万别用clock()
- 事件处理
- SpringMVC 过滤json对象
- C# TimeSpan计算时间间隔
- 深入理解Java的接口和抽象类
- 有关位运算的小总结
- bzoj 2879: [Noi2012]美食节
- angular-应用
- linux下安装mysql
- Basic Concepts of Elasticsearch Elasticsearch基本概念
- Sublime 使用小技巧
- Python 基础——sorted
- Linux下的定时任务crontab设置
- facebook的图片加载控件SimpleDraweeView的属性
- c# Invoke和BeginInvoke 区别
- 无法查找或打开 PDB 文件解决办法
- bzoj 2878: [Noi2012]迷失游乐园