例14

您所在的位置:网站首页 数独有多少种排法 例14

例14

2024-02-24 00:22| 来源: 网络整理| 查看: 265

给出一个4×4的格子,每个格子只能填写1到4的整数,

要求每行、每列和四等分更小的正方形部分都刚好由1到4组成。

给出空白的方格,请问:一共有多少种合法的填写方法?

遇到的问题: 怎么用行列值表示块值呢?

我们发现,第1个两行和两列块值是1,第1个两行和第2个两列块值是2,所以我们就需要求出当前行列是第几个两行、第几个两列。

行列号直接/2结果如下: 0 1 1 2

0

1

1

2

第一二行都属于第1个两行,但是运算得到的结果(为0和1)并不相等。可以参照行值row的求法,先 -1再/2。

行列号先-1再/2,(row-1)/2,(col-1)/2, 结果一: 0 0 1 1

0

0

1

1

结果一行列对应相加,(row-1)/2 + (col-1)/2, 在四个块得到的结果二:

0......1

1......2

后两个块需要把行对应的 1 变成 2 , (row-1)/2 再 × 2 即可。(row-1)/2 × 2 + (col-1)/2,正确的结果一:

(前两个块结果也不受影响,如果 ×2 变成+1就不对了)

0 0 1 1

0

0

2

2

行列号相加,在四个块得到的正确的结果二:

0......1

2......3

最后 +1 即可,结果三:

1......2

3......4

#include #include #include #include #include #include using namespace std; #define size 5 int a[size * size], n=4*4, ans=0; int b1[size][5], b2[size][5], b3[size][5];//分别记录横行、竖排、四小块 void dfs(int x){//第x个空填什么 if(x > n){//如果所有空已经填满 ans++; for(int i=1;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3