酷播亮新聞
最棒的知識補給站

如何在手機上的九宮格密碼上繪出最長距離?

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萬數學精英都在關注!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 超級數學建模 的精彩文章:
如有侵權請來信告知:酷播亮新聞 » 如何在手機上的九宮格密碼上繪出最長距離?