グラフのテンプレート

コンストラクタ

グラフを作成します。ノードの型をUU, 重みの型をTTとしています。

var g = initGraph(n:int, T:typedesc)

頂点数nn, 重みの型がTTのグラフを作成。第2引数のTTは省略可能で省略した場合はintとなります。この呼び方においてはノードの型Uはintが自動で指定されます。

var g = initGraph(n:int, id:proc(u:U):int, T:typedesc)

頂点数nn, ノードの型がUU, 重み型がTTのグラフを作成します。 第2引数のidはUUからint(nn未満の非負整数)を返す関数で異なるノードUUごとに違う値を返さなければなりません。 id関数は最短路問題等でノードに紐付けられたデータを一次元の配列として扱うためのもので必須です。 UUの型はid関数によって特定されます。第3引数のTTは省略可能で省略した場合はintとなります。

var g = initGraph(n:int, id:proc(u:U):int, adj:proc(u:U):seq[tuple[dst:U, weight:T]])
var g = initGraph(n:int, id:proc(u:U):int, adj:iterator(u:U):tuple[dst:U, weight:T])

隣接点をprocやiterator(adj)で指定できます。この場合、各アルゴリズムで隣接点探索をする際にadjが呼び出されます。 iteratorはclosureでなくてはなりません。 この呼び方でグラフを作った場合、辺はadj procやadj iteratorで決められるので、下記のaddEdge関数は使えません。

制約

辺の追加

g.addEdge(u:U, v:U, w:T)

頂点uuから頂点vvへ重みwwの有向辺を追加する。 wwは省略可能。省略した場合はT(1)と解釈される。

制約

g.addBiEdge(u:U, v:U, w:T)

頂点uuと頂点vvを結ぶ重みwwの無向辺を追加 wwは省略可能。省略した場合は1と解釈される。

制約

配列指定によるグラフ作成

initDirectedGraph[T](n:int, a:seq[int], b:seq[int], w:seq[T])

aの長さをmmとしたとき、各i=0,1,,m1i = 0, 1, \ldots, m - 1について、a[i]からb[i]へ重みw[i]w[i]の辺を持つ有向グラフを作成。a, b, wは0-basedでなくてはならないことに注意。

initUnDirectedGraph[T](n:int, a:seq[int], b:seq[int], w:seq[T])

aの長さをmmとしたとき、各i=0,1,,m1i = 0, 1, \ldots, m - 1について、a[i]とb[i]を結ぶ重みw[i]w[i]の辺を持つ無向グラフを作成。a, b, wは0-basedでなくてはならないことに注意。

計算量