다음 링크를 사용하여 그래프를 만들려고했지만 find_path 메서드를 사용했을 때 잘못된 경로가 반환되었습니다. 링크 :그래프가 올바른 경로를 찾지 못하는 이유는 무엇입니까?
http://www.python-course.eu/graphs_python.php
코드 : 그래프 클래스의 find_path 방법 뭐가 문제
class Graph(object):
def __init__(self, graph_dict=None):
""" initializes a graph object
If no dictionary or None is given, an empty dictionary will be used
"""
if graph_dict is None:
graph_dict = {}
self.__graph_dict = graph_dict
def find_path(self, start_vertex, end_vertex, path=[]):
""" find a path from start_vertex to end_vertex
in graph """
graph = self.__graph_dict
path = path + [start_vertex]
if start_vertex == end_vertex:
return path
if start_vertex not in graph:
return None
for vertex in graph[start_vertex]:
if vertex not in path:
extended_path = self.find_path(vertex,
end_vertex,
path)
if extended_path:
return extended_path
return None
g = {"a": ["c", "d"],
"b": ["a", "c"],
"c": ["a", "b", "c", "d", "e"],
"d": ["c", "e"],
"e": ["c", "f"],
"f": ["c"]
}
graph = Graph(g)
"""
graph:
a<----b <-- one way
|\ / --- two way
| \/
| c <-- f
|/\ ^
v/ \ |
d---->e--/
"""
print graph.find_path("b", "f")
Output: ['b', 'a', 'c', 'd', 'e', 'f']
Should be: ['b', 'a', 'd', 'e', 'f']
?
Djikstra의 알고리즘이 작동했습니다. 대답 해줘서 고마워요. – Hsin