,我有以下數據表:Python的迭代深度優先搜索,從表
child_pid parent_pid
1 -1
2 1
6 -1
7 6
8 7
9 8
21 -1
22 21
24 -1
25 24
26 25
27 26
28 27
29 28
99 6
107 99
108 -1
109 108
222 109
1000 7
1001 1000
我想寫一個python迭代深度優先搜索產生以下結果:
('final: ',
[[u'1', u'2'],
[u'6', u'7', u'8', u'9'],
[u'6', u'7', u'1000', u'1001'],
[u'6', u'99', u'107'],
[u'21', u'22'],
[u'24', u'25', u'26', u'27', u'28', u'29'],
[u'108', u'109', u'222']])
以上輸出是使用遞歸方法生成的。我們可以看到,所有的孩子/父母關係都得到適當保存。
我已經利用從另一個教程以下邏輯在我試圖得到一個迭代的方法:
def dfs_iterative(graph, start):
stack, path = [start], []
while stack:
vertex = stack.pop()
if vertex in path:
continue
path.append(vertex)
for neighbor in graph[vertex]:
stack.append(neighbor)
return path
導致:
('final: ',
[[u'1', u'2'],
[u'6', u'99', u'107', u'7', u'1000', u'1001', u'8', u'9'],
[u'21', u'22'],
[u'24', u'25', u'26', u'27', u'28', u'29'],
[u'108', u'109', u'222']])
我們可以看到,結果幾乎是相同的除非節點有多個孩子。具體地,節點6具有以下關係:
6->7->8->9
6->7->1000->1001
6->99->107
在遞歸輸出以上,我們看到,節點6被適當地分解成它的正確的路徑的關係。在我的迭代嘗試中,節點6的所有「後代」都被組合在一起。尋找方式來產生遞歸輸出,但在python中使用迭代方法。思考?我感謝幫助!
[最小,完整,可驗證的示例](http://stackoverflow.com/help/mcve)適用於此處。在發佈您的MCVE代碼之前,我們無法有效幫助您。我們至少需要驅動程序(數據設置和調用序列)。您發佈的代碼片段沒有輸出。更不用說你提供了什麼。 – Prune