【发布时间】:2011-02-23 01:25:41
【问题描述】:
我知道这种结构有一些模块,但我喜欢并且更喜欢自己了解事情的真正运作方式。 所以......我正在尝试从图表中扩展路径,例如:
g = dict(
s=['a','d','s'],
a=['s','d','b'],
d=['s','a','e'],
b=['a','e','c'],
e=['d','b','f'],
f=['e','g'],
c=['b'],
g=['f'])
到目前为止,我可以看到给定节点的邻居:
def vecinosDe(n = ''):
return g[n]
我希望每次调用一个给定参数的函数时,一个图形节点,返回一个连接到给定参数的其他节点的列表。
然后将给定、创建的相同列表输入到相同的函数以返回连接到给定列表图节点的节点,并连续返回直到它到达“g”节点。
我也知道我需要检查连接到给定节点的节点是否有任何递归(循环)。
这是我目前的代码:
def expandir(n = '', lista = []):
lista.append([n]) #or lista = lista + [n]?
for v in g[n]:
for i in range(len(lista)): #?
lista[i].append(v)
return lista
这就是发生的事情,我知道这不好,哈哈。
>>> expandir('s')
[['s', 'd', 'a', 's']]
>>> expandir('d')
[['S', 'D', 'A', 'S', 'S', 'A', 'E'], ['D', 'S', 'A', 'E']]
在第二个for循环中的某些部分代码中,我认为我应该检查是否有一个节点等于我要扩展的节点,即给定的节点。这就是我卡住的地方。
试试这个?
if n == v: #?
另外我认为这可能需要某种递归,对吧?但我想要一些技巧来继续拼图。 :P
我应该返回一个列表,一个列表列表吗?...如何? :S
有小费吗? :)
在此先感谢
【问题讨论】:
-
顺便说一句,你也可以把
graph写成graph = dict(s='ads', a='sdb', d='sae', b='aec', e='dbf', f='eg', c='b', g='f')。字符串也是可迭代的。