<p>问题是您没有创建最佳路径的副本。你应该做:</p>
<pre><code>self.PathList = self.stack.copy()
</code></pre>
<p>一个完整的例子(PEP8的易读性有变化):</p>
<pre><code>import Graph
class GraphSearch:
def __init__(self, graph, nodes):
self.graph = graph.copy()
self.nodes = nodes.copy()
self.visited = None
self.best_path_list = None
self.current_path_list = None
def reset_search(self):
self.visited = {k: False for k, v in self.nodes.items()}
self.best_path_list = list()
self.current_path_list = list()
def _dfs_call(self, current_node, end_node):
self.visited[current_node] = True
self.current_path_list.append(current_node)
if(current_node == end_node):
current_distance = len(self.current_path_list)
best_distance = len(self.best_path_list)
if(current_distance < best_distance):
self.best_path_list = self.current_path_list.copy()
else:
for adj_node in self.graph[current_node]:
if not self.visited[adj_node]:
self._dfs_call(adj_node, end_node)
self.current_path_list.pop()
self.visited[current_node] = False
def dfs(self, current_node, end_node):
self.reset_search()
self._dfs_call(current_node, end_node)
if __name__ == "__main__":
graph = Graph.return_graph()
nodes = Graph.return_nodes()
graph_search = GraphSearch(graph, nodes)
start_node = 'S1'
end_node = 'B8'
graph_search.dfs(start_node, end_node)
print(graph_search.best_path_list)
</code></pre>
<p>我没有测试代码,因为我没有测试数据。你知道吗</p>