数独排列问题
题干:
一个 n 阶数独是指,对于数字 1-n,它们在每行每列都恰出现一次。对于数独中的任意两个同在一行的相邻数字,我们构造相应的有序数对 (i,j)。例如,若存在某一行:xxx i j xxx,此时可构成有序数对 (i,j)。我们的目标是寻找出一张合法的 n 阶数独,使得对于任意的有序数对 (i,j),其中
满足:在整张 n 阶数独中,(i,j) 均恰好出现一次。
输入: n
输出: 若不存在这样的数独排列,则输出"NaN";若存在符合要求的排列方式,则以矩阵形式输出任意一种符合要求的数独内容。
示例 1:
输入:1
输出:1
示例 2:
输入:2
输出:
1 2
2 1
示例 3:
输入:3
输出:NaN
示例 4:
输入:4
输出:
1 2 3 4
3 1 4 2
2 4 1 3
4 3 2 1
有无组合/编程大手子来做做? ![]()
这道题目是一位同学问我的,原题是:有哪些 n 是可以构造出如上数独的?
我只找到了 2 和 4,后面的没有毅力写了,求助一下万能的門友。
年月擦身过,暂且问,会更好吗?
注:
其实原题的要求是:
对于数组中的有序数对,它不能存在出现多次。
就比如:
1 2 3
2 3 1
3 1 2
他就不行,理由是:
(1 2)、(2 3)、(3 1) 均出现了两次。
而
1 2 3 4
3 1 4 2
2 4 1 3
4 3 2 1
其中
(1 2)、 (2 3)、(3 4)、(3 1)、(1 4)、(4 2)、....都只出现了一次。
由于这是 n * n 的方阵,所以有 n * (n-1) 个有序数对。而
也恰有 n * (n-1) 个不同组合,所以我把原问题转化为了 每种二元组恰出现一次。
年月擦身过,暂且问,会更好吗?
我感觉我会 n 是偶数的情况了,n 是奇数的还不太会
n 是偶数的情况,首先看作 0 到 n-1 的排列
第一行:0,n-1,1,n-2,2,n-3……n/2-1,n/2
前 n/2 行:每一行是在上一行的基础上对应位置 +1 mod n
后 n/2 行:把前 n/2 行全部 reverse 倒序反转过来依次放在后 n/2 行
例:n=6:
051423
102534
213045
540312
435201
324150
证明不难,留作练习。。。感觉主要是想到这个题差不多相当于构造一个排列使得其 mod n 意义下的差分数组不能重复。。。然后就循环位移就可以。。。奇数感觉有点神秘,n=3 跑了一下应该是无解的
刚开始我构出来了上面那种“旋转型中心对称”的 n=4,然后我就猜测是不是 2^k 都可以 🤔 但是我接下来按照“旋转型”的构造方式,我搞不出 n=8 的情况。
结果昨晚在我发布问题不久,问我问题的同学也构造出了 n=6,不过他的构造比较乱,没有什么明显的规律。当时我们就在猜,是不是奇数不行偶数行 😗 可是我们摸索了一会儿也没能搞出来 n=2k 情形的通解。。。
总之非常感谢 K 哥的解答 😘 我已转告给那位同学 🥳
年月擦身过,暂且问,会更好吗?
你画我猜问题
假设现在有 n 个人进行你画我猜,共进行 n-1 次传稿,现在希望找到一个传稿规划,满足:
- 每份稿子每个人只接手一次
- 每次传稿后人手一稿,也就是没有人闲着也没有人累死
- 每个人的 n-1 次传稿都传给了 n-1 个不同的下
问:该规划对哪些 n 存在?
(实际上这是原问题,是一位同学在编排你画我猜的传稿顺序的时候遇见的🤣)
年月擦身过,暂且问,会更好吗?
我查了下,好像 n 为奇数的情况只有 3 和 5 不行,其他奇数都可以。。。见这篇论文:https://www.sciencedirect.com/science/article/pii/0095895680900441
虽然我还没有非常看懂
😯我尝试去搜但是没搜出来😭阿里嘎多🥰
年月擦身过,暂且问,会更好吗?