0

グラフと始点を消費するbfsトラバーサルを作成しました。隣接リストで表されたグラフを消費しますが、隣接行列を消費するためにはどのように変更しますか?私はちょうど隣接行列を使った幅優先探索

隣接リストを開始する場所が必要:

{0:[1,2,3],1:[0,2,3],2:[0,1,4],3:[0,1],4:[2]} 

隣接行列:

[ [0,1,1,1,0], 
    [1,0,1,1,0], 
    [1,1,0,0,1], 
    [1,1,0,0,0], 
    [0,0,1,0,0] ] 

def bfs(graph, v): 
    all = [] 
    Q = [] 
    Q.append(v) 
    while Q != []: 
    v = Q.pop(0) 
    all.append(v) 
    for n in graph[v]: 
     if n not in Q and\ 
     n not in all: 
     Q.append(n) 
    return all 
+0

隣接リストの表現を使用する部分を見てください。あなたはノードの隣人を反復しています。隣接行列を持つノードの隣接ノードを反復処理する方法を解説します。 – user2357112

答えて

1

私は一度、同様の問題があった、と私はそれが最も簡単だと思いますあなたのマトリックスを隣接リストに変換してください:

def matrix_to_list(matrix): 
    graph = {} 
    for i, node in enumerate(matrix): 
     adj = [] 
     for j, connected in enumerate(node): 
      if connected: 
       adj.append(j) 
     graph[i] = adj 
    return graph 

返されたノードのリストで正規(およびデバッグ済み)幅広い検索アルゴリズムを使用できます。私は助けてくれることを願っています。