判断数独是否正确
来源:互联网 发布:xp 淘宝伴侣 编辑:程序博客网 时间:2024/06/05 11:26
想必大家都玩过数独吧(我竟没玩过.....),在最近的周赛中我就遇到了一个关于数独的问题,给出数独让你判断是否正确,当时a了,可后来经过查询发现当时是由于数据不全面的原因才侥幸通过,下面我就纠正一下我的错误,聪明的你可不要犯和我一样错误吆。
错误!!!的思想:
1,,每列中包含1~9
2,每行中包含1~9
后来才知道原来只满足这两个条件并不能满足每一个九宫格中包含1~9
正解!!!:
1,,每列中包含1~9
2,每行中包含1~9
3.每个九宫格中包含1~9代码:
.
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
using namespace std;
int G[10][10];
bool Line[10][10]; //Line[i][j]:判断第i行数字j有没有出现过
bool Column[10][10]; //Column[i][j]:判断第i列数字j有没有出现过
bool Block[10][10]; //Block[i][j]:判断第i块数字j有没有出现过
int t;
bool judge()
{
memset(Line,false,sizeof(Line));
memset(Column,false,sizeof(Column));
memset(Block,false,sizeof(Block));
for(int i =1;i<=9;i++)
{
for(int j = 1; j<=9;j++)
{
int Blocknum = (i-1)-((i-1) % 3) + ((j-1) / 3 + 1);
Line[i][G[i][j]] = 1;
Column[j][G[i][j]] = 1;
Block[Blocknum][G[i][j]] = 1;
}
}
int flag = 1;
for(int i =1;i<=9;i++)
{
for(int j = 1; j<=9;j++)
{
if( !Line[i][j] ) return 0;
if( !Column[i][j]) return 0;
if( !Block[i][j]) return 0;
}
}
return flag;
}
int main()
{
cin>>t;
while(t--)
{
memset(G,0,sizeof(G));
for(int i = 1; i <= 9; i++)
{
for(int j = 1; j<=9;j++)
{
scanf("%d",&G[i][j]);
}
}
bool flag = judge();
if (flag) cout<<"Right"<<endl;
else cout<<"Wrong"<<endl;
}
return 0;
}
#include<cstring>
#include<iostream>
#include<cmath>
using namespace std;
int G[10][10];
bool Line[10][10]; //Line[i][j]:判断第i行数字j有没有出现过
bool Column[10][10]; //Column[i][j]:判断第i列数字j有没有出现过
bool Block[10][10]; //Block[i][j]:判断第i块数字j有没有出现过
int t;
bool judge()
{
memset(Line,false,sizeof(Line));
memset(Column,false,sizeof(Column));
memset(Block,false,sizeof(Block));
for(int i =1;i<=9;i++)
{
for(int j = 1; j<=9;j++)
{
int Blocknum = (i-1)-((i-1) % 3) + ((j-1) / 3 + 1);
Line[i][G[i][j]] = 1;
Column[j][G[i][j]] = 1;
Block[Blocknum][G[i][j]] = 1;
}
}
int flag = 1;
for(int i =1;i<=9;i++)
{
for(int j = 1; j<=9;j++)
{
if( !Line[i][j] ) return 0;
if( !Column[i][j]) return 0;
if( !Block[i][j]) return 0;
}
}
return flag;
}
int main()
{
cin>>t;
while(t--)
{
memset(G,0,sizeof(G));
for(int i = 1; i <= 9; i++)
{
for(int j = 1; j<=9;j++)
{
scanf("%d",&G[i][j]);
}
}
bool flag = judge();
if (flag) cout<<"Right"<<endl;
else cout<<"Wrong"<<endl;
}
return 0;
}
和我一样,可能在第一次看到这个代码的时候
int Blocknum = (i-1)-((i-1) % 3) + ((j-1) / 3 + 1); 对这句话不太了解,这句的意思是计算这个数属于第几个九宫格,
Block[Blocknum][G[i][j]] = 1;
这句的意思则是第几个九宫格的第几个数十存在的
0 0
- 判断数独是否正确
- [各种面试题] 检查数独是否正确
- 输入一个数,判断输入是否正确。
- Valid Sudoku 判断数独是否可解
- valid-sudoku判断是否是有效数独
- 6.15判断数独
- 数独判断程序
- 判断数独是否合法
- 数独游戏--判断现有数字是否有解--不管是否最终有解Valid Sudoku
- 写出两个数的计算结果,并判断是否正确
- 用正则表达式判断运算数格式是否正确
- 数独判断 Valid Sudoku
- 题目:判断数独是否合法
- 容易 判断数独是否合法
- LintCode-判断数独是否合法
- Valid Sudoku-数独判断
- LintCode398:判断数独是否合法
- LintCode:判断数独是否合法
- 第十一章案例例分析
- 双SD卡切换(SD SWAP) 方案,如何恢复“设置->存储->默认存储器”的用户选择功能
- js 获取当前时间戳
- 学生信息管理系统注册页面(first html)
- C++作业6
- 判断数独是否正确
- FFMPEG 硬件解码
- 仪仗队[SDOI2008][bzoj2190]
- 虚拟机字节码执行引擎
- 【Leetcode】 Distinct Subsequences
- textView 点击return 键时 键盘下去
- 弹性布局
- 电脑提示MFC42.dll丢失怎么解决
- QSharedMemory类