SDNU-1054.数独
Description
syc最近迷上了数独这个游戏,他在完成一个数独后总要费一些时间来检查。于是他把lg作为苦力拽来帮他检查。由于lg是搞基的,所以他就想写个程序来判断syc完成的数独是否正确。不过最近他在感情上遇到了一些问题没有功夫去写,就想请你帮他完成这个任务。
数独规则:拼图是九宫格(即3格宽×3格高)的正方形状,每一格又细分为一个九宫格。在每一个小九宫格中,分别填上1至9的数字,让整个大九宫格每一列、每一行的数字都不重复。
Input
一个9*9个矩阵
每个为1到9的数字
Output
一个数字,1为构成数独,0为不构成数独
Sample Input
3 8 7 9 6 2 5 1 4
5 1 9 4 3 8 7 6 2
6 2 4 1 5 7 3 9 8
8 7 6 3 1 9 2 4 5
2 9 1 5 8 4 6 7 3
4 3 5 2 7 6 1 8 9
7 5 8 6 4 3 9 2 1
9 4 3 7 2 1 8 5 6
1 6 2 8 9 5 4 3 7
Sample Output
1
按照我一开始很麻烦的遍历总是出错,然后换了一下思路就对了。
新思路:我把所有需要判断的重新储存到一个二维数组中,然后判断就简便多了。
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <string>
#include <cstdio>
using namespace std;
typedef long long ll;
int main()
{
int a[10][10],b[30][10];
for (int i=1; i<10; i++)
for (int j=1; j<10; j++)
{
cin>>a[i][j];
b[i-1][j-1]=a[i][j];
}
int k=1,kk=1,bb=9,bbb=0;
while(bb<=18)
{
bbb=0;
for (int i=k; i<=k+2; i++)
for (int j=kk; j<=kk+2; j++)
b[bb][bbb++]=a[i][j];
kk+=3;
if (kk>7)
{
k+=3;
kk=1;
}
bb++;
}
bb=18;
for (int i=1;i<=9;i++)
{
bbb=0;
for (int j=1;j<=9;j++)
b[bb][bbb++]=a[j][i];
bb++;
}
for (int i=0;i<27;i++)
sort(b[i],b[i]+9);
int flag=1;
for (int i=0;i<27;i++)
for (int j=0;j<9;j++)
if (b[i][j]!=j+1)
{
flag=0;
break;
}
if (flag)
cout<<1<<endl;
else
cout<<0<<endl;
return 0;
}