Dream To Me

总有些什么留下来并被惦记

验证数独


  真是上瘾了。。。困难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