Skip to content

Latest commit

 

History

History
22 lines (14 loc) · 1.43 KB

eulerian-trail.md

File metadata and controls

22 lines (14 loc) · 1.43 KB
documentation_of
//graph/others/eulerian-trail.hpp

概要

有向/無向グラフが与えられたときに, グラフの全ての辺をちょうど $1$ 回ずつ通る閉路やパスを各連結成分について求める.

連結なグラフでオイラー閉路が存在する必要十分条件は, 有向グラフでは全ての頂点について入次数と出次数が等しいこと, 無向グラフでは全ての頂点の次数が偶数であることである.

連結なグラフでオイラー路が存在する必要十分条件は, オイラー閉路の条件にマッチするかどうかに加えて, 有向グラフでは入次数と出次数の差が $1$ である頂点が $2$ 個, 無向グラフでは次数が奇数の頂点が $2$ 個であることである.

使い方

  • add_edge(a, b): 頂点 a, b 間に辺をはる.
  • enumerate_eulerian_trail(): すべての連結成分についてオイラー路を列挙し, オイラー路の辺の idx の列を結合したものを返す. オイラー路が存在しない連結成分があるとき空列を返す.
  • enumerate_semi_eulerian_trail(): すべての連結成分について準オイラー路を列挙し, 準オイラー路の辺の idx の列を結合したものを返す. 準オイラー路が存在しない連結成分があるとき空列を返す.
  • get_edge(idx): idx 番目に追加した辺の ${from, to}$ を返す.

計算量

$O(V + E)$