我的问题难以解释:
首先,这里有一些背景信息:
想象一下有一个3*6的表格,里面有一些物品(比如说4个)。这些物品可以根据某些规则在表格中移动。我想要获取所有可能的物品摆放方式。我的解决方案是找出每个物品的“移动空间”,在不违反规则的情况下物品可以自由移动,然后生成所有可能的摆放方式。
一个重要的事情是:一个物品的“移动空间”取决于其他物品的位置。如果一个物品改变了它的位置,其他物品的“移动空间”也会发生变化。
假设我们有四个物品,它们的初始位置存储在一个字典中:
我们有一个用于确定给定字典中给定项的“移动空间”的函数。
这很棘手,因为我有500多个相同的问题,每个案例都有不同数量的项目和位置设置。因此,我想知道是否可能创建一个n-嵌套循环的函数,每个级别可以创建一个新的待迭代字典?
我知道递归可能行得通,但我不太熟悉它。有什么建议吗?
谢谢!
编辑:
指数系统可能对您来说似乎很奇怪,因为它从1开始,而且更糟的是,坐标中的第一个数字是列,第二个数字是行。我做了一些琐碎的事情,但如果我改回去,问题仍然存在。
首先,这里有一些背景信息:
想象一下有一个3*6的表格,里面有一些物品(比如说4个)。这些物品可以根据某些规则在表格中移动。我想要获取所有可能的物品摆放方式。我的解决方案是找出每个物品的“移动空间”,在不违反规则的情况下物品可以自由移动,然后生成所有可能的摆放方式。
一个重要的事情是:一个物品的“移动空间”取决于其他物品的位置。如果一个物品改变了它的位置,其他物品的“移动空间”也会发生变化。
假设我们有四个物品,它们的初始位置存储在一个字典中:
items = ['a','b','c','d']
position_dict = {'a': (1, 6), 'b': (1, 1), 'c': (1, 4), 'd': (2, 1)}
我们有一个用于确定给定字典中给定项的“移动空间”的函数。
available_pos('a', position_dict)
[(1, 5), (1, 6), (2, 4), (2, 5), (2, 6)]
好的,这里有一个问题。我正在编写一个丑陋的嵌套“for”循环来生成放置位置。它首先更新字典并获取下一个物品的移动空间,然后循环这个新的移动空间,直到达到最低级别。
pos = []
ava1 = available_pos('a', position_dict) # a dict for a's space
for a in ava1:
position_dict['a'] = a # update the dict
ava2 = available_pos('b', position_dict) # new dict for b's space
for b in ava2:
position_dict['b'] = b # update the dict
ava3 = available_pos('c', position_dict) # new dict for c's space
for c in ava3:
position_dict['c'] = c # update the dict
ava4 = available_pos('d', position_dict) # new dict for d's space
for d in ava4:
pos.append([a, b, c, d])
这很棘手,因为我有500多个相同的问题,每个案例都有不同数量的项目和位置设置。因此,我想知道是否可能创建一个n-嵌套循环的函数,每个级别可以创建一个新的待迭代字典?
我知道递归可能行得通,但我不太熟悉它。有什么建议吗?
谢谢!
编辑:
指数系统可能对您来说似乎很奇怪,因为它从1开始,而且更糟的是,坐标中的第一个数字是列,第二个数字是行。我做了一些琐碎的事情,但如果我改回去,问题仍然存在。
position_dict
中的位置(1,6)
上放置了'a'
。假设你想表示的是位置(0,5)
,那么周围只有 3 个空位置可用:[(1,5), (0,4), (1,4)]
,而不是你在问题中提到的 5 个。请澄清并相应地[编辑]你的问题。 - martineau