问题描述
现有 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个点,十个点都满足这样,则输出这个列表。