巧放五角星

在这里插入图片描述

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

发布了19 篇原创文章 · 获赞 15 · 访问量 4214

猜你喜欢

转载自blog.csdn.net/weixin_43952190/article/details/103392464
今日推荐