王守恩 发表于 2025-8-17 11:43:37

(* 终极优化:成对放置算法(支持大 n 计算)*) LangfordCount := Module[{L = 2n+1, count = 0, stack, positions, used, firstVal, lastVal, pos, k, newState, candidates, nextPos, i, prevPos, startTime},

(* 初始化状态 *) positions = ConstantArray[-1, L]; used = Table; stack = {{positions, used, -1, -1}}; startTime = AbsoluteTime[]; While > 0,

(* 进度显示 *) If == 0 && count > 0, Print["n=", n, " 已计算: ", count, " 状态数: ", Length, " 耗时: ", Round - startTime], "秒"]];

{positions, used, firstVal, lastVal} = Last; stack = Most;
   
(* 找到第一个空位 *) pos = FirstPosition; If, If; Continue[]; ]; pos = pos[];
   
(* 1. 特殊处理:首位放置 *) If] == 0 && (nextPos = 1 + k + 1) <= L && positions[] == -1,

newState = { ReplacePart,ReplacePart, k, lastVal}; stack = Append; ], {k, 2, n} (* 首位只放2~n *)]; Continue[]; ];
   
(* 2. 特殊处理:尾位放置 *) If; Do] == 0 && (prevPos = L - (k + 1)) >= 1 && positions[] == -1,

newState = {ReplacePart, ReplacePart, firstVal, k}; stack = Append; ], {k, 1, maxK} (* 尾位放1~(firstVal-1) *)]; Continue[]; ];
   
(* 3. 常规放置 *) candidates = {};
   
(* 3.1 放置0 *) If] == 0, AppendTo];
   
(* 3.2 放置数字 *) Do] == 0, (* 检查作为第一个k的位置 *) nextPos = pos + k + 1; If] == -1, AppendTo; ]; ], {k, 1, n}];
   
(* 处理候选 *) Do;If, ReplacePart, firstVal, lastVal},

(* 放置数字 *) newState = {ReplacePart, ReplacePart,

(* 只标记使用一次 *)If, If}]; stack = Append; , {i, Length}]];

Print["n=", n, " -> ", count, " (总耗时: ", Round - startTime], "秒)"];count]; (* 计算n=14 *) LangfordCount

011,
021,
031,
043,
0511,
0638,   
07130,n=7 -> 130 (总耗时: 0秒)
08638,    n=8 -> 638 (总耗时: 2秒)
094158,   n=9 -> 4158 (总耗时: 11秒)
1023384,n=10 -> 23384 (总耗时: 87秒)
11124520,n=11 -> 124520 (总耗时: 711秒)
12847484,   n=12 -> 847484 (总耗时: 6265秒)
136987380,   
1453746000,
15400346544,    谢谢网友uk702!
163529108816,    谢谢网友l4m2!
1735963592624,    谢谢网友l4m2!
18351432650816,    谢谢网友l4m2!
193346590201888,   谢谢网友l4m2!
2036341624453568,   谢谢网友l4m2!
21443385597340544,   谢谢网友mathe!
225245806847699840,   谢谢网友mathe!——这个太伟大了!!!——比了才知道!!!

王守恩 发表于 2025-8-19 11:43:34

用楼上的代码,连14也出不来(我已经很努力了了)!——225245806847699840,   谢谢网友mathe!——这个太伟大了!!!——比了才知道!!!
页: 1 2 3 4 5 6 [7]
查看完整版本: 完美间隔配对排列