九宫格数独游戏每行每列每条对角线之和都相等如何填数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了九宫格数独游戏每行每列每条对角线之和都相等如何填数?相关的知识,希望对你有一定的参考价值。

玩“数独”游戏无需掌握任何一门特定的语言。事实上,从技术的角度来说,你甚至连数数都不用会。所有要做的就是将1到9这9个数字按一定秩序填入每行(从左至右)、每列(从上至下)、每个小九宫格(内有9个小方格),每个数字在每行、每列、每个小九宫格中只能出现一次。

做题时一个好的方法就是从小九宫格入手,更好的方法是研究一组小九宫格,寻找出成对的数字,由此你可推出第三个。举个例子:如果左上角的小九宫格中有数字7,左下角的小九宫格中也有7,则不难推出左中的小九宫格中7的位置。同样也以用这样的方法解出水平位置的数字。如果存在两种可能性。记录下来,然后继续。

每道题都可根据所提供的数字为线索,通过逻辑推理解答来。如果按照正确的解题方法,猜测就没有必要。一定要记:每道题只有一种答案。
先从已知数最多的横或竖或小方格做起,看这里可以填的是哪几个数,再一个一个地试(对比它的横或竖或小方格)。找到突破口是关键。 这样可以解决初级的数独题。

如果你做高级的题,也基本是这样的思考方法,但在有的地方你可能无法确定哪一个数是唯一的,就需要做一个假设。然后往下走,如果不发生矛盾,就成功了。如果发生了矛盾,就回到假设的地方,重新设另一个假设。再走下去。

九宫格,二十五宫格,甚至八十一宫格,只要是奇数的平方宫格者能做到横格相加,坚格相加,斜格相加得数相同。而偶数的宫格只有十六宫格有些规律。

下面是三宫格、五宫格、七宫格、九宫格图.

三宫格(和15)
8 1 6
3 5 7
4 9 2

五宫格(和65)
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9

七宫格(和175)
30 39 48 1 10 19 28
38 47 7 9 18 27 29
46 6 8 17 26 35 37
5 14 16 25 34 36 45
13 15 24 33 42 44 4
21 23 32 41 43 3 12
22 31 40 49 2 11 20

九宫格(和369)

47 58 69 80 1 12 23 34 45
57 68 79 9 11 22 33 44 46
67 78 8 10 21 32 43 54 56
77 7 18 20 31 42 53 55 66
6 17 19 30 41 52 63 65 76
16 27 29 40 51 62 64 75 5
26 28 39 50 61 72 74 4 15
36 38 49 60 71 73 3 14 25
37 48 59 70 81 2 13 24 35

这是八十一宫格的排列图,你可以从中找出规律。
首先在第一行中间写下1,然后向下移动到最底下,向右移一格写下2,然后一下向右上方写到最边处,
然后平移到最左边,向上移动一格再向右上方写。遇到数字后向下写一格,继续向右上写。
按此规律,可写出任意奇数的平方宫格。

偶数宫格好象没有规律,且除了十六宫格外,其它的好象也填不出来。填写十六宫格也有一个规律,叫做“顺序排列,双肩互换”,就是第一行写上1、2、3、4,第二行5、6、7、8,一直到第四行13、14、15、16,然后2与15对调,3与14对调,5与12对调,8与9对调就可以了。

奇宫格我有另外的方法,1站当中,以马步照顺序下去就可以了,但要注意一点,几宫格逢几下一个数直接写下面,如5宫:
23 12 1 20 9
4 18 7 21 15
10 24 13 2 16
11 5 19 8 22
17 6 25 14 3
参考技术A 回答

玩“数独”游戏无需掌握任何一门特定的语言。事实上,从技术的角度来说,你甚至连数数都不用会。所有要做的就是将1到9这9个数字按一定秩序填入每行(从左至右)、每列(从上至下)、每个小九宫格(内有9个小方格),每个数字在每行、每列、每个小九宫格中只能出现一次。 做题时一个好的方法就是从小九宫格入手,更好的方法是研究一组小九宫格,寻找出成对的数字,由此你可推出第三个。举个例子:如果左上角的小九宫格中有数字7,左下角的小九宫格中也有7,则不难推出左中的小九宫格中7的位置。同样也以用这样的方法解出水平位置的数字。如果存在两种可能性。记录下来,然后继续。 每道题都可根据所提供的数字为线索,通过逻辑推理解答来。如果按照正确的解题方法,猜测就没有必要。一定要记:每道题只有一种答案。 先从已知数最多的横或竖或小方格做起,看这里可以填的是哪几个数,再一个一个地试(对比它的横或竖或小方格)。找到突破口是关键。 这样可以解决初级的数独题。

dfs(0634-数独)

问题描述

数独是非常流行的益智游戏,把一个9x9的九宫格分成9个小的3x3的小九宫,如下图所示。在这个九宫格上,每个小格子可以填的数字为1,2,3,...,9。初始时,某些格子已经填好数字,剩余的一些则为空白,你的任务是把空白的数字都填上1,2,3,...,9数字的一个,使得表格上每一行、每一列、以及每一个小九宫均含有有1,2,3,...,9(显然每个数字在每行、每列和每个小九宫中都出现并且只能出现一次)。请你写一个程序解决数独问题。
技术分享

输入

输入为9行,每行9个数字,其中0代表对应的小格子为空白的格子。

输出

输出为9行,每行9个有1,2,3,...,9构成的数字。即数独问题的解。

输入样列
103000509
002109400
000704000
300502006
060000050
700803004
000401000
009205800
804000107
输出样例
143628579
572139468
986754231
391542786
468917352
725863914
237481695
619275843
854396127
说一下思路吧,我是参考黄学长的~就是将每一行每一列每一个九宫格标记一下,然后dfs搜索,注意边界和搜索完要保持原先的状态即可~
#include<bits/stdc++.h>
#define Next(x,y) y==9 ? dfs(x+1,1) : dfs(x,y+1)
using namespace std;

int a[10][10],b[10][10];
bool l[10][10],r[10][10],s[10][10];
int Map[10][10];

int fill(int x,int y,int k)
{
	if(l[x][k]||r[y][k]||s[Map[x][y]][k]) return 0;
	b[x][y]=k;
	l[x][k]=r[y][k]=s[Map[x][y]][k]=1;
	return 1;
}

void del(int x,int y,int k)
{
	b[x][y]=0;
	l[x][k]=r[y][k]=s[Map[x][y]][k]=0;
}

void print()
{
	for(int i=1;i<=9;i++){
		for(int j=1;j<=9;j++)
			cout<<b[i][j]<<"";
			cout<<"\n";}
}

void dfs(int x,int y)
{
	if(x==10&&y==1)
	{
		print();exit(0);
	}
	if(b[x][y]) Next(x,y);
	else
	{
		for(int i=1;i<=9;i++)
		{
			if(fill(x,y,i))
			{
				Next(x,y);
				del(x,y,i);//搜过之后要删除 
			}
		}
	}
}

void init()
{
	for(int i=1;i<=9;i++)
		for(int j=1;j<=9;j++)
			Map[i][j]=(i-1)/3*3+(j-1)/3+1;
}

int main()
{
	char str;
	init();
	/*for(int i=1;i<=9;i++){
		for(int j=1;j<=9;j++)
			cout<<Map[i][j]<<" ";
			cout<<"\n";}*/
	for(int i=1;i<=9;i++)
	{
		for(int j=1;j<=9;j++)
		{
			str=getchar();
			a[i][j]=str-‘0‘;
			if(a[i][j])
				fill(i,j,a[i][j]);
		}
		getchar();
	}
	dfs(1,1);
	/*for(int i=1;i<=9;i++){
		for(int j=1;j<=9;j++)
			cout<<s[i][j]<<" ";
			cout<<"\n";}*/
}

 

以上是关于九宫格数独游戏每行每列每条对角线之和都相等如何填数?的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV玩九宫格数独(零)——预告篇

下面的方阵图中,每行、每列、每条对角线上的3个数的和相等

怎样判断矩阵每行每列主对角线以及反对的线上元素之和都相等。

请将2-10这九个数字填入九宫格时每行每列及对角线的和都相等

已知图中每行每列以及每条对角线上的三个数的和都相等,那么x应该等于多少?

幻方问题:一个n*n的矩阵中填入1到n*n的数字,使得每一行每一列每条对角线的累加和都相等。