feg*_*ege 6 python longest-path
我有一份国家名单,我希望拥有最长的国家道路,每个国家的选择必须以结束前一个元素的相同字母开头
nations = ['albania','andorra','austria','belarus','belgium','bosnia and herzegovina',
'bulgaria','croatia','czech republic','denmark','estonia',
'finland','france','germany','greece','hungary',
'iceland','ireland','italy','latvia','liechtenstein','lithuania','luxembourg',
'macedonia','malta','moldova','monaco','montenegro','netherlands',
'norway','poland','portugal','romania','russia',
'san marino','serbia','slovakia','slovenia','spain','sweden', 'switzerland',
'ukraine','united kingdom','vatican city']
chain('spain')
>>>['spain', 'netherlands', 'slovenia', 'andorra', 'austria', 'albania']
Run Code Online (Sandbox Code Playgroud)
我试过这种方式,但它不起作用
def chain(naz):
initial = naz[-1]
initials=[]
res = set()
res.add(naz)
for i in nations:
if i.startswith(initial):
initials.append(i)
for j in initials:
nations.remove(j)
res.add(j)
chain(j)
return res
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?
以下是一些评论:
while某个地方i.startswith(initial)只有当我从整个初始单词开始时才是真的.你可能不想要这个nations 是一个全局变量,这是坏事编辑
您的评论中描述的错误可能会发生,因为您的recurcive调用在j循环内.重复呼叫可以删除国家的元素,这些元素也可能存在于首字母中.所以你试图不止一次地删除它们,这引起了一个例外.你可能意味着把它放在chain(j)循环之外(并且可能使用它的返回值?)
我也去了递归下降.不确定动态编程是否适合这种情况,因为列表会随着我们的进行修改.稍微更紧凑,在调用链之前不需要从列表中删除.:-)
def chain(start, countries):
remaining = list(countries)
del remaining[remaining.index(start)]
possibles = [x for x in remaining if x[:1] == start[-1:]]
maxchain = []
for c in possibles:
l = chain(c, remaining)
if len(l) > len(maxchain):
maxchain = l
return [start] + maxchain
Run Code Online (Sandbox Code Playgroud)
像这样打电话.:-)
>>> chain('spain', nations)
['spain', 'netherlands', 'serbia', 'albania', 'andorra', 'austria']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2763 次 |
| 最近记录: |