bzoj3109【CQOI2013】新数独

来源:互联网 发布:什么是数据库设计 编辑:程序博客网 时间:2024/05/21 23:33

3109: [cqoi2013]新数独

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 365  Solved: 229
[Submit][Status][Discuss]

Description

Input

输入一共15行,包含一个新数独的实例。第奇数行包含左右方向的符号(<和>),第偶数行包含上下方向的符号(^和v)。
 

Output

输出包含9行,每行9个1~9的数字,以单个空格隔开。输入保证解惟一。

Sample Input

< > > < > <
v v ^ ^ v v ^ ^ ^
< < > < > <
^ ^ ^ v ^ ^ ^ v v
< < < < > >
> < > > > >
v ^ ^ ^ ^ v v v ^
> > > > < >
v v ^ v ^ v ^ v ^
> < < > > >
< < < < > <
v ^ v v v v ^ ^ v
< > > < < >
^ v v v ^ v ^ v v
< > < > < >

Sample Output

4 9 1 7 3 6 5 2 8
2 3 7 8 1 5 6 4 9
5 6 8 2 4 9 7 3 1
9 1 3 6 5 4 8 7 2
8 5 4 9 7 2 1 6 3
7 2 6 3 8 1 9 5 4
3 4 9 5 6 8 2 1 7
1 8 5 4 2 7 3 9 6
6 7 2 1 9 3 4 8 5



dfs的剪枝优化,读入有点麻烦,细心就好了。




#include<iostream>#include<cstdio>#include<cmath>#include<cstdlib>#include<cstring>#include<algorithm>#define F(i,j,n) for(int i=j;i<=n;i++)#define D(i,j,n) for(int i=j;i>=n;i--)#define ll long long#define HK_reporter mainusing namespace std;int a[10][10],fh[10][10],fl[10][10];bool flag,vsth[10][10],vstl[10][10],vst[10][10];inline bool judge(char ch){return ch=='<'||ch=='>'||ch=='v'||ch=='^';}inline void readh(int x){char ch;F(i,1,6){ch=getchar();while (!judge(ch)) ch=getchar();fh[x][(i-1)/2+i]=(ch=='>')?1:0;}}inline void readl(int x){char ch;F(i,1,9){ch=getchar();while (!judge(ch)) ch=getchar();fl[x][i]=(ch=='v')?1:0;}}inline void pre(){memset(fh,-1,sizeof(fh));memset(fl,-1,sizeof(fl));F(i,1,3){readh((i-1)*3+1);readl((i-1)*3+1);readh((i-1)*3+2);readl((i-1)*3+2);readh((i-1)*3+3);}}inline int num(int x,int y){return (x-1)/3*3+(y-1)/3+1;}inline void dfs(int x,int y){if (y>9) x++,y=1;if (x>9){F(i,1,9){F(j,1,8) printf("%d ",a[i][j]);printf("%d\n",a[i][9]);}flag=true;return;}F(i,1,9) if (!vsth[x][i]&&!vstl[y][i]&&!vst[num(x,y)][i]){if (fl[x-1][y]==0&&a[x-1][y]>=i) continue;if (fl[x-1][y]==1&&a[x-1][y]<=i) continue;if (fh[x][y-1]==0&&a[x][y-1]>=i) continue;if (fh[x][y-1]==1&&a[x][y-1]<=i) continue;vsth[x][i]=vstl[y][i]=vst[num(x,y)][i]=true;a[x][y]=i;dfs(x,y+1);if (flag) return;vsth[x][i]=vstl[y][i]=vst[num(x,y)][i]=false;}}int HK_reporter(){pre();dfs(1,1);return 0;}


0 0
原创粉丝点击