巧放五角星

在這裏插入圖片描述

問題描述
現有 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個點,十個點都滿足這樣,則輸出這個列表。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章