まず、この質問をご覧いただきありがとうございます。
学校の課題では、BFSアルゴリズムを作成し、それを使用してさまざまなことを行うことになっています。これらの1つは、グラフのルートノードとゴールノードの間のすべてのパスを見つけることになっているということです。コピー/サイクルも含めずにすべての代替ルートを追跡する方法が見つからないため、これを行う方法がわかりません。
これが私のBFSコードです:
def makePath(predecessors, last):
return makePath(predecessors, predecessors[last]) + [last] if last else []
def BFS1b(node, goal):
Q = [node]
predecessor = {node:None}
while Q:
current = Q.pop(0)
if current[0] == goal:
return makePath(predecessor, goal)
for subnode in graph[current[0]][2:]:
if subnode[0] not in predecessor:
predecessor[subnode[0]] = current[0]
Q.append(subnode[0])
正しい方向への概念的な推進をいただければ幸いです。
tl; dr BFSを使用して2つのノード間のすべてのパスを見つけるにはどうすればよいですか?
ジェフ・マルカドの質問に答える方法がわからないので、これがグラフです。
graph = { 'A':[366, 3, ('Z', 75 ), ('T', 118), ('S', 140)],
'Z':[374, 2, ('A', 75 ), ('O', 71 )],
'T':[329, 2, ('A', 118), ('L', 111)],
'L':[244, 2, ('T', 111), ('M', 70 )],
'M':[241, 2, ('L', 70 ), ('D', 75 )],
'D':[242, 2, ('M', 75 ), ('C', 120)],
'C':[160, 3, ('D', 120), ('R', 146), ('P', 138)],
'R':[193, 3, ('C', 146), ('P', 97 ), ('S', 80 )],
'S':[253, 4, ('R', 80 ), ('F', 99 ), ('O', 151), ('A', 140)],
'O':[380, 2, ('S', 151), ('Z', 71 )],
'P':[100, 3, ('C', 138), ('R', 97 ), ('B', 101)],
'F':[176, 2, ('S', 99 ), ('B', 211)],
'B':[ 0, 4, ('P', 101), ('F', 211), ('G', 90 ), ('U', 85 )],
'G':[ 77, 1, ('B', 90 )],
'U':[ 80, 3, ('B', 85 ), ('H', 98 ), ('V', 142)],
'H':[151, 2, ('U', 98 ), ('E', 86 )],
'E':[161, 1, ('H', 86 )],
'V':[199, 2, ('U', 142), ('I', 92 )],
'I':[226, 2, ('V', 92 ), ('N', 87 )],
'N':[243, 1, ('I', 87 )],
'W':[400, 1, ('X', 100)],
'X':[400, 1, ('W', 100)],}