2011-04-03 5 views
2

私の形式はテキストファイル解析しようとしています:彼らは最短パスを実装するための間は、オブジェクトを作成するには、テキストファイルを解析

A B 2 
A G 6 
A C 99 
... 
B C 7 
B E 2 
B G 99 

は今、これらは「ノード」と「コスト」を表すのアルゴリズム。 私は、2つのインスタンス変数、隣接ノードであるハッシュの名前と配列、およびそこに到達するコストを持つNodeクラスを作成することに決めました。

私はファイルを各行のグループから一連のノードオブジェクトに解析する方法を理解しようとしています。 99のコストはノードが接続されていないことを意味します。

+2

また、あなたは[RGL](http://rgl.rubyforge.org/)(Ruby Graph Library) –

答えて

6

まず、ノードとエッジを管理するGraphクラスも用意する必要があります。次に、このあなたが始める必要があるようなもの:

g = Graph.new 
File.open('your_data_file').each do |line| 
    n1, n2, wt = line.split(/\s+/) 
    n1 = g.find_or_create_node(n1) 
    n2 = g.find_or_create_node(n2) 
    wt = wt.to_i 
    g.add_edge(n1, n2, wt) if(wt != 99) 
end 
# g is now your fully populated graph. 

グラフ、gは、それはそうfind_or_create_nodeは、それがすでに存在する場合はノードを返すか、それを作成していない場合は、それをキャッシュすることができたノードを追跡します。 add_edgeメソッドは、n1n2の端を重みのwt.to_iに接続します。

最短パスアルゴリズムは、おそらくグラフオブジェクトのメソッド呼び出しになります。

+0

@emelを使用することができます。これはあなたの質問に対する正しい答えのようです。それが正解であるかどうかチェックできますか? –

+0

RGL :: Graph:ModuleのエラーNoMethodError:未定義のメソッド 'new 'を取得します。 – jspooner

+0

@jspooner:あなたはたぶんそのことについてナッシュと話したいと思います。 –

関連する問題