2010-12-14 6 views

答えて

11

(私の意見では)それを表現する最も簡単な方法は、配列リストの辞書を使用することです:

graph = {} 
graph[node_id] = [other_node_id for other_node_id in neighbors(node_id)] 

サイクルを見つける簡単な方法は、BFまたはDFの検索を使用することです:

def df(node): 
    if visited(node): 
     pass # found a cycle here, do something with it 
    visit(node) 
    [df(node_id) for node_id in graph[node]] 

免責事項:これは実際のスケッチです。 neighbors()visited()およびvisit()は、アルゴリズムの外観を表すための単なるダミーです。

+1

配列の辞書は、リストの辞書を意味しますか? –

+0

@バニーウサギerm ..はい。申し訳ありませんが、名前を誤って使用しました> –

4

Python Graph APIは、開始するのに適しています。

たとえば、NetworkXには、最小スパニングツリーを検出するKruskalのアルゴリズム実装があります。

ホイールを再発明して自分でやりたければ、それも可能です。

+3

はい私はこの最初のホイールを少なくとも再発明しようとしています。 –

関連する問題