SDNU-1054.数独(判断数独是否正确)

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;
}

猜你喜欢

转载自blog.csdn.net/weixin_43892298/article/details/87708694