A:這樣的九宮格,如何才能畫出最長線條??注意不能跨點。。。。
Q:精確值應該是
這個確實是最長路徑
其實這個答案也不難想到,不過證明還是要靠計算機窮舉。
當然根據對稱性,這八種都可以:
限定連接 n 個點的話,最短不用說應該都會構造,最長的話如下:
附對比代碼:
FindPatterns[pattern_List]:=Block[
,
If[moves==={},Sow[pattern],
Scan[If[
pattern==={}||!MemberQ[moves,Mean[]],
FindPatterns[Append[pattern,#]]
]&,moves]]
];
AllPatterns=With[
]][[2,1]]},
Table[FullPatterns[[All,Range[dots]]]//Union,]
];
Length/@AllPatterns
(*
AllPatterns2=Block[
,
AllPermutations=Permutations[Range[1,9],];
InvalidSegments={,,,,,,,,,,,,,,,};
InvalidPattern=],___};
ValidPermutations=DeleteCases[AllPermutations,InvalidPattern];
ToGrid=Thread[Range[9]->Tuples[Range[3],2]];
Table[Select[ValidPermutations,Length[#1]==i&],]/.ToGrid
];
Length/@AllPatterns2
*)
GetDistanceTotal[EuclideanDistance@@@Partition[#,2,1]]&
TableForm[
Table[Join[,MinMax[AllDistance[[i]]],],],
TableHeadings->}
]
cs=Circle[#,0.3]&/@Tuples[Range[3],2];
AllDistance=Array[GetDistance/@AllPatterns[[#]]&,9];
AntiGrid=Thread[Tuples[Range[3],2]->Range[9]];
ToGrid=Thread[Range[9]->Tuples[Range[3],2]];
MaxPath=Extract[AllPatterns[[#]],Position[AllDistance[[#]],Max[AllDistance[[#]]]]]/.AntiGrid&;
FromDigits/@MaxPath[9]
First /@ Table[FromDigits /@ MaxPath[i], ]
我這個代碼比顧森那個快兩倍,而且也不用列什麼禁止列表(畢竟4*4列到死也不知有沒有漏)
然而並沒有什麼卵用,畢竟還是沒法算4*4棋盤…
我還見到了一種神奇的全程模式匹配解法,Mathematica的多種玩法真是令人窒息:
https://qiita.com/math_nakagawa/items/a83f43b2319ed6229e8a
本文由超級數學建模編輯整理
資料來源於醬紫君(知乎):
https://www.zhihu.com/question/30437539/answer/407468585
——這裡是數學思維的聚集地——
「超級數學建模」(微信號supermodeling),每天學一點小知識,輕鬆了解各種思維,做個好玩的理性派。50萬數學精英都在關注!