問題: 如上圖,把所有波羅包用一條線連起來,線只能走水平或垂直,且不碰到普通麵包。 分析: 這是所謂的一筆畫問題的一種。可以將問題轉化成圖(Graph),由頂點(Vertex)和邊(Edge)構成,每個波羅包為一個頂點,編號 1-22,連到上下左右相鄰的波羅包為邊 針對一個圖,一筆畫連接所有頂點的解,稱為一個 Hamiltonian path。基於對稱性可以理解,一個解的反向順序亦為一解,所以解的總數必為偶數。 這類問題的一般解法相當耗時,計算量和頂點的個數成指數函數關係,一筆畫的解一定在 $n$ 個頂點的排列之中,而 $n$ 個頂點的排列數有 $n!$ 種,由此可略知一二。 組合學的結論基本上是說,邊的數量要夠多,才能構成一筆畫。 這個問題和[ 這題 ]有點相似,我們嘗試用相同的方法解看看。 先試一個簡單的例子 把頂點、邊的關係列出: net = { '1': ['2','3'], '2': ['1','3'], '3': ['1','2'] } 其餘的程式不變,求所有解,可得 6 個解,也就是說,3 個頂點的所有 3! = 6 種排列,都是一筆畫的解 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 回到原問題,每個頂點連接的邊,最多 4 個,少則只有 2 個,很可能無解。一樣把頂點、邊的關係列出: net = { '1': ['2','7'], '2': ['1','3','8'], '3': ['2','4','9'], '4': ['3','5','10'], '5': ['4','11'], '6': [...