問題描述
現有 10 顆五角星,在方格線中放置這些五角
星,每條線上有且僅有兩顆,怎樣進行巧放(已經
有兩顆已經放好了,還剩 8 顆未放)。
項目要求
(1) 請編制 Python 程序進行求解其他 8 個五
角星該如何放置。
(2) 請用 Python 程序列出符合要求的 10 顆
五角星擺放的所有可能。
【輸出格式要求】
爲每個解決方案一行,一行內按照字母順序輸出
10 個位置。
【可選項】可以以圖形的方式輸出所有結果。
** 附上代碼:**
import random
import itertools
s=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22]
points=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y']
Graph = [['a','c','e','f','g'],
['a','b','x','m','l'],
['a','v','w','t','r'],
['d','c','b','v','u'],
['d','e','x','p','o'],
['d','f','h','i','j'],
['g','h','x','s','r'],
['g','i','k','y','l'],
['j','k','x','w','u'],
['j','y','m','n','o'],
['l','n','p','q','r'],
['o','q','s','t','u']]
twopoints=input("請輸入兩個起始點(用逗號隔開):")
star_pos=[]
star_pos=twopoints.split(',')
for a in star_pos:
points.remove(a)
list1=list(itertools.combinations(s,8))
for e in list1:
star_pos=twopoints.split(',')
j=0
for i in range(0,8):
star_pos.append(points[e[i]])
for each in Graph:
i=0
for each1 in star_pos:
if(each1 in each):
i+=1
if(i>2):
continue
elif(i==2 or i==0):
j+=1
if(j==12):
print(star_pos)
else:
continue
看似很複雜的問題,其實用到一個全排列可以得到所有其他八個點的組合關係,用判斷條件循環去判斷。主要的判斷方法用到的是,用生成的十個字母,逐條線段去判斷,如果又某個線段上這些點中有兩個以上,就跳過繼續循環,如果每行有且爲2個點,十個點都滿足這樣,則輸出這個列表。