验证数独
真是上瘾了。。。困难3现在一般6分钟左右就能搞定的说。。。
说写程序来着。。。就写了一个,调了一阵子,没啥太大的难度。。。然后。。以后无聊的话再写个带显示坐标的版本。。。唉在机房里搞这东西就是有效率啊。。。要么成功要么失败。。测了些数据,到现在还没发现什么问题。。。
样例解释。。。easy的意思是是否满足横竖出现的数字唯一,1是满足,0是不满足。hard的意思是是否满足9小格中数字出现唯一。。同样1是满足0是不满足。。OK。。
另外如果要我自己写个程序来解数独。。。估计能弄死我。。。
Code:
/*
Name: Check Sudoku
Author: Vivian
Date: 2008-03-21 21:03
*/
#include <iostream>
#define N 9
using namespace std;
int Sudoku[N][N];
int easy(void)
{
int i,j;
for(i=0;i<N;i++)
{
int across[N]={0};
int stand[N]={0};
for(j=0;j<N;j++)
{
across[Sudoku[i][j]-1]++;
stand[Sudoku[j][i]-1]++;
}
for(j=0;j<N;j++)
if(!(across[j]&&stand[j]))
return 0;
}
return 1;
}
int hard(void)
{
int i,j,k,site=0;
for(k=0;k<N/3;k++)
{
int box[N]={0};
for(i=0;i<N;i++)
{
for(j=site;j<site+3;j++)
box[Sudoku[i][j]-1]++;
if((i+1)%3==0)
for(j=0;j<N;j++)
if(!box[j])
return 0;
}
site=3*(k+1);
}
return 1;
}
int main()
{
freopen("Sudoku.txt","r",stdin);
freopen("Answer.txt","w",stdout);
int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
cin>>Sudoku[i][j];
cout<<"Easy:"<<easy()<<endl;
cout<<"Hard:"<<hard()<<endl;
return 0;
}样例输入1
3 5 6 9 4 8 7 2 1
7 1 2 5 6 3 4 8 9
4 9 8 7 2 1 3 5 6
1 8 4 2 7 5 9 6 3
6 7 3 8 1 9 2 4 5
5 2 9 6 3 4 1 7 8
9 6 1 4 5 7 8 3 2
8 4 5 3 9 2 6 1 7
2 3 7 1 8 6 5 9 4
样例输出1
Easy:1
Hard:1
样例输入2
1 2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9 1
3 4 5 6 7 8 9 1 2
4 5 6 7 8 9 1 2 3
5 6 7 8 9 1 2 3 4
6 7 8 9 1 2 3 4 5
7 8 9 1 2 3 4 5 6
8 9 1 2 3 4 5 6 7
9 1 2 3 4 5 6 7 8
样例输出2
Easy:1
Hard:0
样例输入3
1 2 3 4 5 6 7 8 9
4 5 6 7 8 9 1 2 3
7 8 9 1 2 3 4 5 6
1 2 3 4 5 6 7 8 9
4 5 6 7 8 9 1 2 3
7 8 9 1 2 3 4 5 6
1 2 3 4 5 6 7 8 9
4 5 6 7 8 9 1 2 3
7 8 9 1 2 3 4 5 6
样例输出3
Easy:0
Hard:1
样例输入4
3 3 7 8 5 4 9 2 1
9 8 4 2 1 3 5 7 6
7 2 1 3 8 9 6 4 5
8 1 9 7 4 6 3 5 2
5 4 3 9 2 8 1 6 7
2 7 6 1 9 5 8 3 4
3 5 2 6 7 1 4 9 8
4 9 8 5 6 2 7 1 3
1 6 5 4 3 7 2 8 9
样例输出4
Easy:0
Hard:0
