グラフを作成します。ノードの型を, 重みの型をとしています。
var g = initGraph(n:int, T:typedesc)
頂点数, 重みの型がのグラフを作成。第2引数のは省略可能で省略した場合はintとなります。この呼び方においてはノードの型Uはintが自動で指定されます。
var g = initGraph(n:int, id:proc(u:U):int, T:typedesc)
頂点数, ノードの型が, 重み型がのグラフを作成します。 第2引数のidはからint(未満の非負整数)を返す関数で異なるノードごとに違う値を返さなければなりません。 id関数は最短路問題等でノードに紐付けられたデータを一次元の配列として扱うためのもので必須です。 の型はid関数によって特定されます。第3引数のは省略可能で省略した場合は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)
頂点から頂点へ重みの有向辺を追加する。 は省略可能。省略した場合はT(1)と解釈される。
制約
g.addBiEdge(u:U, v:U, w:T)
頂点と頂点を結ぶ重みの無向辺を追加 は省略可能。省略した場合は1と解釈される。
制約
initDirectedGraph[T](n:int, a:seq[int], b:seq[int], w:seq[T])
aの長さをとしたとき、各について、a[i]からb[i]へ重みの辺を持つ有向グラフを作成。a, b, wは0-basedでなくてはならないことに注意。
initUnDirectedGraph[T](n:int, a:seq[int], b:seq[int], w:seq[T])
aの長さをとしたとき、各について、a[i]とb[i]を結ぶ重みの辺を持つ無向グラフを作成。a, b, wは0-basedでなくてはならないことに注意。
計算量