POJ 3435 Sudoku Checker

Description

The puzzle game of Sudoku is played on a board of N2 × N2 cells. The cells are grouped in N × N squares of N × N cells each. Each cell is either empty or contains a number between
1 and N2.

The sudoku position is correct when numbers in each row, each column and each square are different. The goal of the game is, starting from some correct position, fill all empty cells so that the final position is still correct.

This game is fairly popular in the Internet, and there are many sites which allow visitors to solve puzzles online. Such sites always have a subroutine to determine a correctness of a given position.

You are to write such a routin.

Input

Input file contains integer N, followed by N4 integers — sudoku position. Empty cells are denoted by zeroes.

Constraints

1 ≤ N ≤ 10.

Output

Output file must contain a single string ‘CORRECT‘ or ‘INCORRECT‘.

 

Sample Input

Sample input 1
2
0 0 0 0
0 0 0 0
0 0 2 0
0 0 0 1
Sample input 2
2
2 1 3 0
3 2 4 0
1 3 2 4
0 0 0 1

Sample Output

Sample output 1
CORRECT
Sample output 2
INCORRECT

卧槽,数独,判断行,列和小方格里的数不重复。但只判断当前状态。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<limits.h>
using namespace std;
const int maxn=110;
int a[maxn][maxn],n;
int x[maxn][15];
int y[maxn][15];
int s[maxn][15];

int main()
{
    while(~scanf("%d",&n))
    {
        memset(x,0,sizeof(x));
        memset(y,0,sizeof(y));
        memset(s,0,sizeof(s));
        bool flag=true;
        for(int i=0;i<n*n;i++)
        {
            for(int j=0;j<n*n;j++)
            {
                scanf("%d",&a[i][j]);
                if(a[i][j]>0&&flag)
                {
                    if(!x[i][a[i][j]])//判断行
                       x[i][a[i][j]]=1;
                    else
                       flag=false;
                    if(!y[j][a[i][j]])//判断列
                       y[j][a[i][j]]=1;
                    else
                        flag=false;
                    if(!s[i/n*n+j/n+1][a[i][j]])//判断小方格
                        s[i/n*n+j/n+1][a[i][j]]=1;
                    else
                        flag=false;
                }
            }
        }
        if(flag)
            printf("CORRECT\n");
        else
            printf("INCORRECT\n");
    }
    return 0;
}

POJ 3435 Sudoku Checker,布布扣,bubuko.com

时间: 2024-10-06 00:38:55

POJ 3435 Sudoku Checker的相关文章

POJ训练计划1035_Spell checker(串处理/暴力)

3.算法综合实践--搜索引擎 上网搜索有关"搜索引擎"的相关资料,包括但不限于以下方面(至少要有2个方面):搜索引擎岗位要求.搜索引擎工作原理.搜索引 擎涉及到教材中哪些算法.搜索引擎的盈利模式.搜索引擎源码链接.国内外搜索引擎公司现状等. <1>搜索引擎指自动从因特网搜集信息,经过一定整理以后,提供给用户进行查询的系统.因特网上的信息浩瀚万千,而且毫无秩序,所有的信息像汪洋上的一个个小岛,网页链接是这些小岛之间纵横交错的桥梁,而搜索引擎,则为用户绘制一幅一目了然的信息地图

[ACM] POJ 1035 Spell checker (单词查找,删除替换增加任何一个字母)

Spell checker Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 18693   Accepted: 6844 Description You, as a member of a development team for a new spell checking program, are to write a module that will check the correctness of given word

poj 3074 Sudoku(Dancing Links)

Sudoku Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8152   Accepted: 2862 Description In the game of Sudoku, you are given a large 9 × 9 grid divided into smaller 3 × 3 subgrids. For example, . 2 7 3 8 . . 1 . . 1 . . . 6 7 3 5 . . .

poj 3435 检测数独状态是否合法

题意: 给一个数独的状态,判断它是否合法. 分析: 水,直接判断. 代码: //poj 3435 //sep9 #include <iostream> using namespace std; const int maxN=10; const int MAX=maxN*maxN+10; int a[MAX][MAX]; int col_check[MAX][MAX]; int row_check[MAX][MAX]; int grid_check[MAX][MAX]; int n,c,r; b

POJ 3076 Sudoku (dancing links)

题目大意: 16*16的数独. 思路分析: 多说无益. 想说的就是dancing links 的行是按照 第一行第一列填 1 第一行第二列填 2 -- 第一行第十五列填15 第一行第二列填 1 -- 第二行.... 列的纺织则是 第一行放1,第一行放2,..第十六行放16...第一列放1..第一列放2...第十六列放16..第一块区域放1 ....然后在最后81位就是放自己的位置,准确的说就是 r*m+c. #include <cstdio> #include <iostream>

ACdream 1195 Sudoku Checker (暴力)

Sudoku Checker Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) SubmitStatus Problem Description Sudoku is a popular single player game. The objective is to fill a 9x9 matrix with digits so that each column, each row, a

POJ3435 Sudoku Checker

问题链接:POJ3435 Sudoku Checker.入门练习题,用C语言编写程序. 题意简述:输入n,然后输入(n×n)×(n×n)的二维数组,0表示可以是任意值,编写程序检查这些数据是否满足数独的初始状态. 问题分析:需要做的检查有:值范围检查,行.列和块的值重复检查. 程序中编写函数getblock()用于将行和列的值转换为块的值. AC的C语言程序如下: /* POJ3435 Sudoku Checker */ #include <stdio.h> #include <memo

POJ 2676 Sudoku (数独)

经典搜索问题,主要是时间上的优化,我用了三个辅助数组记录信息 row[i][k] = 1表示第i行数字k已经被使用,col[j][k] = 1表第j列数字k已经被使用,blo[i][k]表示第i个小九宫格中数字k已经被使用 还有很重要的一个优化(没有优化的话可能会超时,或者非常慢,像POJ讨论区里有很多说正着搜超时,倒着搜0ms,这的确是一个可以用的方法,但是有一定的随机性),每次填数字时,先扫描一遍整个矩阵,找出可选数字情况最少的那个0所在的地方,优先填这里,这样会使得搜索树尽可能的"瘦&qu

POJ 1035 Spell checker (串)

题目大意: 问你后面输入的串能不能通过  加减一个字符,或者替换一个字符变成字典中的串. 思路分析: 直接模拟替换加减的过程. 比较两个串的长度.要相差为1 的时候才能进行模拟. 模拟的过程就是进行一个个的匹配. 发现失配的次数小于等于 1就可以输出. #include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #include <string> #i