验证数独
来源:互联网 发布:职业介绍所 知乎 编辑:程序博客网 时间:2024/05/17 23:55
每一行都用到1,2,3,4,5,6,7,8,9,位置不限,
每一列都用到1,2,3,4,5,6,7,8,9,位置不限,
每3×3的格子(共九个这样的格子)都用到1,2,3,4,5,6,7,8,9,位置不限,
游戏的过程就是用1,2,3,4,5,6,7,8,9填充空白,并要求满足每行、每列、每个九宫格都用到1,2,3,4,5,6,7,8,9。
如下是一个正确的数独:
5 8 1 4 9 3 7 6 2
9 6 3 7 1 2 5 8 4
2 7 4 8 6 5 9 3 1
1 2 9 5 4 6 3 7 8
4 3 6 1 8 7 2 9 5
7 5 8 3 2 9 1 4 6
8 9 2 6 7 1 4 5 3
6 1 5 9 3 4 8 2 7
3 4 7 2 5 8 6 1 9
Input
第一行为数独个数,第二行开始为第一个数独,之后为第二个,至第n个.
注意!每个数独之间有一个回车隔开!
Output
Sample Input
5 8 1 4 9 3 7 6 2
9 6 3 7 1 2 5 8 4
2 7 4 8 6 5 9 3 1
1 2 9 5 4 6 3 7 8
4 3 6 1 8 7 2 9 5
7 5 8 3 2 9 1 4 6
8 9 2 6 7 1 4 5 3
6 1 5 9 3 4 8 2 7
3 4 7 2 5 8 6 1 9
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
Sample Output
Wrong
Hint
不论输入的数独是错误的还是正确的,数据都保证每个数在1-9之间,即只会出现因为有相同的数而导致违反规则,而不会因为数字超出了1-9的范围而违反规则.------搜索练习
#include<stdio.h>
#include<string.h>
int a[10];
int ma[9][9];
int flag, f =1, flag2;
void judge_ge();
void judge_hl();
int main()
{
int i,N,j;
scanf("%d", &N);//输入的组数;
while(N--)
{
flag = 0;
flag2 =0;
memset(a, 0, sizeof(a));
memset(ma, 0, sizeof(ma));
for(i = 0; i < 9; i++)
for(j = 0; j < 9;j++)
{
scanf("%d", &ma[i][j]);
}
judge_ge();//判断3*3的格子;
if(flag == 1)
printf("Wrong\n");
else
{
judge_hl();//判断行和列的冲突;
if(flag2 == 0)
{
printf("Right\n");
}
else
{
printf("Wrong\n");
}
}
}
return 0;
}
void judge_ge()
{
int i,j,k,m;
for(i = 0; i < 9; i+=3)//判断九个大格子;
{
if(f % 3 == 1)//让f在1~3之间;
{
for(m = i; m < i+3; m++)//判断0~2列的三个大格子;
for(j = 0; j < 3;j++)
{
a[ma[m][j]]++;
if(a[ma[m][j]] > 1)
{
flag = 1;
break;
}
}
if(flag == 1)
break;
else
memset(a, 0, sizeof(a));
}
else if(f % 3 == 2)
{
for(m = i; m < i+3; m++)//判断3~5列的格子;
for(j = 3; j < 6; j++)
{
a[ma[m][j]]++;
if(a[ma[m][j]] > 1)
{
flag = 1;
break;
}
}
if(flag == 1)
break;
else
memset(a, 0, sizeof(a));
}
else if(f % 3 == 3)
{
for(m = i; m < i +3; m++)//判断6~8列的格子;
for(j = 6; j < 9; j++)
{
a[ma[m][j]] ++;
if(a[ma[m][j]] > 1)
{
flag = 1;
break;
}
}
if(flag == 1)
break;
else
memset(a, 0, sizeof(a));
}
}
}
void judge_hl()
{
int i,j;
for(i = 0; i < 9; i++)
{
memset(a, 0, sizeof(a));
flag2 = 0;
for(j = 0; j < 9; j++)//验证行的数独;
{
if(a[ma[i][j]] > 1)
{
flag2 = 1;
break;
}
if(flag2 == 1)
break;
else
{
memset(a,0, sizeof(a));
}
}
for(j = 0; j < 9;j++)
{
a[ma[j][i]]++;
if(a[ma[j][i]] > 1)
{
flag2 = 1;
break;
}
}
if(flag2 == 1)
break;
}
}
- 【模拟】验证数独
- 验证数独
- 验证数独
- 验证数独
- 验证数独
- Vijos 数独验证
- 【模拟】【RQNOJ】验证数独
- 【vijos】P1335 数独验证
- Leetcode022--验证数独棋盘
- Valid Sudoku:数独验证
- 验证数独(深度搜索)
- LeetCode Valid Sudoku数独有效性验证
- Vijos 1335-数独验证【模拟】
- Vijos 1335题:数独验证
- Vijos P1335 数独验证【谜题】
- C# 数独游戏 递归,回溯,验证是否满足数独
- 数独
- 数独
- linux shell编程指南第九章------AWK 介绍3
- windows2008利用serv-u14.0.0.6架设FTP服务器的方法
- 关于日志文件系统
- 三角复制
- epoll
- 验证数独
- Ubuntu 12.10 +Hadoop 1.2.1版本集群配置
- webkit入门准备
- Linux基础知识总结-文件管理
- NOTES.INI 在Full Text / KeyView 领域中的常用配置
- 支付宝与微信:移动支付的巅峰对决
- apache开启日志记录,access.log
- 通过压缩数据提高Domino网络传输性能
- 编程面试的10大算法概念汇总