2016-05-26 4 views
0

私は以下のプログラムを書いており、修正方法がわからない2つの「間違い」があります。入力b1、c1、d1およびe1は、点および隣接ノードに対応する。 たとえば、入力を与えた場合:A B C、これはA点からBとCに移動できることを意味します。入力f1は開始点と終了点に対応します。私は入力与える場合たとえば、:ADを、これはあなたがポイントで、点Aで開始し、終了したいことを意味D.最短パスプログラムPython

b1 = input() 
c1 = input() 
d1 = input() 
e1 = input() 
f1 = input() 
b = b1.split() 
c = c1.split() 
d = d1.split() 
e = e1.split() 
f = f1.split() 
b_node = b[1:] 
c_node = c[1:] 
d_code = d[1:] 
e_node = e[1:] 
f_node = f[1:] 

G = {b[0]:b_node, c[0]:c_node, d[0]:d_node, e[0]:e_node} 

def find_path(graph, start, end, path = []): 
    path = path + [start] 
    newpath = [] 
    if start == end: 
     return path 
    shortest = None 
    for node in graph[start]: 
     if node not in path: 
      newpath = find_path(graph, node, end, path) 
      if newpath: 
       if not shortest or len(newpath)<len(shortest): 
        shortest = newpath 
    return shortest 
print(find_path(G, f[0], f[1])) 

私は

A B C 
B A C 
C B D 
D 
A D 

私の質問私のプログラムに次の入力を与えます次のようになります。 1. d_node = [](空)のため、プログラムからエラーが発生します。しかし、これは であると思われます。なぜならD点からはどこにも行けないからです!どうすれば正しく動作させることができますか? 2.私のプログラムが数字の「N」ポイントを要求してから、それらのポイントに隣接するすべての情報を与えるためにN行を与える方法はありますか?私は形式の何かを試した

input_list = [] 
x = int(input()) 
for i in range(x): 
    input_list.append(input()) 

しかし、それは働くことができませんでした..任意のアイデア?

答えて

0

1:
「d_code」と書かれているように、「d_node」の入力ミスがあります。

2:
whileループを試してください。空白行を入力すると続行します(これは、入力が完了したことを示します)。次のようなもの:

while True: 
    i = input() 
    if not i: 
     break 
+0

ようこそスタックオーバーフロー!これはよく書かれた答えですが、私たちは関連する部品だけに答えを出そうとしています。私はあなたの答えを編集して挨拶を削除しました。 –