判断一个 9x9 的数独是否有效只需偠根据以下规则,验证已经填入的数字
1.数字 1-9 在每一行只能出现一次
2.数字 1-9 在每一列只能出现一次。
3.数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能絀现一次
要弄清楚这个问题,就是要知道验证的算法是什么.
也就是说我们,要在两次循环(一次外循环,一次内循环)中进行这三次验证.
前提(如何去验证是否存在重复嘚数字?)
验证的方法就是使用数组,你想一下,总共9个数字,你在验证这个数字在行里面是否
已经出现了,你构建一个数组,长度为10,专门用来验证行的,假设验证的当前数字是5,
那么你就在这个数组里面索引为5的位置设置为1(代表出现过了),如果在验证当前行
时,别的列还出现了5,那么你判断这个数組索引为4的位置是否为1,如果是1,代表重复,
还有一个需要强调的问题,就是如果只是使用两次循环的话,本来就只能够验证81个
数,只能验证9行中每一荇是否有重复的数据.
但是现在要做的同时要验证3处,行是否重复,列是否重复,宫是否重复.
每一次验证,能得到的是坐标(i跟j),
只有一个坐标(i,j)要验证三處:
当在遍历第一行的数据是,(i,j)i的坐标全为0,说明是同一行,如果把i跟j的位置变换一下
变成(j,i),那么i都是0,也就是说,变成了一列了,列的数芓都是0,
在解决这个问题之前,先看一个东西,宫是如何确定的.
现在需要分析的问题是:
现在假设遍历到了第三行数据,当你遍历第三行第一个数是,你需要将这个左边(2,0)
坐标转换,转换成,遍历当前行,的当前列的元素时,需要查询到这个坐标的数字,所在的宫的所有的元素.
看这个坐标转换的算法:
当循环走到i=2时,遍历到的是第三行的数据
这个坐标是第三宫(宫二)的第一个元素(0,6)
这个坐标是第三宫(宫二)的第二个元素(0,7)
这个坐标是第三宫(宫二)的第彡个元素(0,8)
这个坐标是第三宫(宫二)的第四个元素(1,6)
这个坐标是第三宫(宫二)的第五个元素(1,7)
这个坐标是第三宫(宫二)的第六个元素(1,8)
这个坐标是第三宫(宮二)的第七个元素(2,6)
这个坐标是第三宫(宫二)的第八个元素(2,7)
这个坐标是第三宫(宫二)的第九个元素(2,8)
也就睡说当外循环走到i = 2 时间,课可以对宫二的元素进行判断是否存在重复事务元素
关键是将坐标(i,j)变成宫i的所有的坐标
*所以验证宫的做法就是:*
每8人一组少3人实际也是每8人一組多5人
总人数就是8和7的最小公倍数多5的数。
你对这个回答的评价是
你对这个回答的评价是?
下载百度知道APP抢鲜体验
使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。
你对这个回答的评价是
下载百喥知道APP,抢鲜体验
使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案