Week 10 (2025/6/27)¶
今週の目的
グラフ上のノードをたどる。
今週のキーワード
- グラフ上のウォーク(歩道)
今回はグラフの探索の準備として、隣接ノードを辿るプログラムを実装する。
課題1:グラフ上を歩く¶
前回実装したGraph
クラスを継承し、隣接ノードを辿る以下のwalk(start, step)
メソッドを備えたGraphWalk
クラス定義せよ。ただし、訪問先のノードは近傍リストの先頭のノードとする。
なお、Graph
クラスはdef_graph.py
モジュールのGraph
クラスをインポートして用いること。
GraphWalk
クラスの仕様は、以下の通りである。
GraphWalkクラス
class GraphWalk()
Graph
クラスのサブクラス
グラフ上のノードを辿ることができるクラス
walk(start, step)
指定されたノードから指定された数だけグラフ上のノードを辿る(ウォーク)メソッド
パラメータ
- start: ウォークの開始ノードのID(文字列)
- step: 辿る隣接ノードの数(整数)
次に、前回と同じkyotocitybus_line.dat
のデータを読み込んだGraphWalk
インスタンスを用いて、ED01_1914
から5ステップ
分進むパスを出力せよ。なお、kyotocitybus_line.dat
は、「バス停ID バス停ID 京都市 路線名」のフォーマットで表されたエッジリストである。
課題2:グラフ上を巡回せずに歩く¶
課題1で作成したwalk(start, step)
メソッドを改良し、訪問済みのノードの再訪を避ける、以下のwalk_without_loop(start, step)
メソッドを定義せよ。
GraphWalk
クラスのwalk_without_loop
メソッドの仕様は、以下の通りである。
walk_without_loopメソッド
walk_without_loop(start, step)
指定されたノードから指定された数だけグラフ上の未訪問のノードを辿る(ウォーク)メソッド
パラメータ
- start: ウォークの開始ノードのID(文字列)
- step: 辿る隣接ノードの数(整数)
次に、kyotocitybus_line.dat
のデータを読み込んだGraphWalk
インスタンスを用いて、ED01_1914
からループせずに5ステップ
分進むパスを出力せよ。課題1と結果が異なることに注意せよ。
課題3:グラフ上の指定された道を歩く¶
課題1で作成したwalk(start, step)
メソッドを改良し、指定したラベルのエッジを辿る、以下のwalk_along_route(start, step, route)
メソッドを定義せよ。
GraphWalk
クラスのwalk_along_route
メソッドの仕様は、以下の通りである。
walk_along_routeメソッド
walk_along_route(start, step, route)
指定されたノードから指定された数だけ、グラフ上の指定されたラベルに接続するノードを辿る(ウォーク)メソッド
パラメータ
- start: ウォークの開始ノードのID(文字列)
- step: 辿る隣接ノードの数(整数)
- label: 隣接ノードに接続するエッジのラベル(文字列)
次に、kyotocitybus_line.dat
のデータを読み込んだGraphWalk
インスタンスを用いて、ED01_1914から5ステップ分進む快速202号系統のパスを出力せよ。余力があれば、kyotocitybus_stop.dat
のデータも読み込み、バス停IDをバス停名に変換して表示せよ。