本記事の内容
本記事は「有向グラフとは何か?」「隣接行列とは何か?」について解説する記事です。
本記事を読むにあたり、グラフと路について知っている必要があるため、以下の記事も合わせて御覧ください。
↓「グラフとは何か?」の記事
↓「路とは何か?」の記事
有向グラフ
まず、有向グラフについて解説します。
「有向グラフ」を一言で。
シンプルなコンセプトです。
有向グラフとは
です。
ここで注意なのが、今まで考えてきた無向グラフというのは、辺に向きが”無い”のではなくて(字面ではそうですが)、各辺に対して2つの向き(往復で2つ)を持つようなグラフです。
全ての辺に対して、その辺が持つ2つの向きの内、どちらか1つを選んだグラフのことを有向グラフといいます。
何が言いたいか、というと
ということです。
「有向グラフ」を数学的に表現します。
有向グラフとはいえ、グラフですので、「グラフとは何か?」という問と”ほぼ”同じ答えです。
有向グラフ
集合V,Eoに対して、VとEoの対Xo=(V,Eo)が以下を満たすときXoは有向グラフ(directed graph)であるという。- V∩Eo=∅
- 写像io:Eo→V×Vが存在する。

ここで、io(e)=(o(e),t(e)) (e∈Eo)とすることで、o:Eo→V、t:Eo→Vを得ます。
ちなみに、XoやらioやらEoやらのoはoriented(日:方向づけられた)のoです。
一般のグラフと何が違うんですか?
一般のグラフの説明と何が違うか、という話をします。
一般のグラフとは以下でした。
グラフ
集合V,Eに対して、VとEの対X=(V,E)が以下を満たすときXはグラフであるという。- V∩E=∅
- 次の性質を満たす写像i:E→V×V、ι:E→Eが存在する。
- ι2(=ι∘ι)=idE(ただし、idEはEの恒等写像)
- 任意のe∈Eに対して以下が成り立つ。 ι(e)≠e,i(ι(e))=τ(i(e)) ただし、τ:V×V→V×Vはτ(x,y)=(y,x)により定まる写像である。
詳しくは【幾何学の基礎シリーズ】グラフ理論編 その1をご覧ください。
端的に何が違うか、というと「ι:E→Eが存在しない。」という点が違います。
むしろ、一般のグラフはこのι:E→Eが存在すると仮定しているため全ての辺の向きに逆向きがあることが保証されています。
その逆向きの存在を保証している写像ι:E→Eが存在しない、というのが有向グラフです。
無向グラフから有向グラフを作る事ができます。
この章の最初に、有向グラフは
と述べました。
そして、無向グラフは向きが存在しないのではなくて、往復の2つの方向があり、有向グラフはこの2方向の内1つの方向を選んだグラフだ、と述べました。
故に、無向グラフから有向グラフを作り出すことが出来ます。
「2つある向きのうち、片方を選んだグラフが有向グラフなんだからそりゃそうだよね」というシンプルな話です。
この主張を数学的にまとめると以下です。
命題1.
グラフX=(V,E)に対して、 Eo∪¯Eo=E,Eo∩¯Eo=∅ となるようなEo⊂Eを取れば、Xo=(V,Eo)は有向グラフである。ただし、 ¯Eo={ˉe∈E|e∈Eo} である。命題1.の証明
これはもはや証明する必要がないような感じです。
というのも、X=(V,E)はグラフなので、以下を満たすような写像i:E→V×V、ι:E→Eが存在しています。
- ι2(=ι∘ι)=idE(ただし、idEはEの恒等写像)
- 任意の(e\in E)に対して
ι(e)≠e,i(ι(e))=τ(i(e))
が成り立つ。
そして、Eo⊂Eですから、io:Eo→V×VをiのEoへの制限として定めればXo=(V,Eo)が有向グラフです。
命題2.の証明終わり
隣接行列
次に、有向グラフを行列に対応させることを考えます。
結論を言ってしまえば、有向グラフの頂点の繋がり方を表す行列が隣接行列です。
隣接行列のイメージ
A=(aij)行列と有向グラフXo=(V,Eo)とを以下の規則で対応させます。
- 頂点の集合Vは{1,…,n}に対応させる。
- aij>0のとき、そしてこのときのみ、iを始点とし、jを終点とする有向辺が存在する。
このように規則を定めることで、行列がグラフと対応付けられます。
例2. 次の行列に対する有向グラフを図示してみます。
B=(0000.70.10.20000.400.50.200.20.8)
- a11=0により、1という名前のついた頂点を始点、1という名前のついた頂点を終点とする有向辺が存在しません。
すなわち、頂点1にはループ辺が存在しません。 - a12=0により、1という名前のついた頂点を始点、2という名前のついた頂点を終点とする有向辺が存在しません。
- a13=0もa12と同じ。
- a14=0.7>0により、1という名前のついた頂点を始点、4という名前のついた頂点を終点とする有向辺が存在します。
- a21=0.1>0により、2という名前のついた頂点を始点、1という名前のついた頂点を終点とする有向辺が存在します。
- a22=0.1>0により、2という名前のついた頂点を始点、2という名前のついた頂点を終点とする有向辺が存在します。
すなわち、頂点2にはループ辺が存在します。 - a23=0もa12と同じ。
- a24=0もa12と同じ。
- a31=0もa12と同じ。
- a32=0.4>0により、3という名前のついた頂点を始点、2という名前のついた頂点を終点とする有向辺が存在します。
- a33=0もa12と同じ。
- a34=0.5>0により、3という名前のついた頂点を始点、4という名前のついた頂点を終点とする有向辺が存在します。
- a41=0.2>0により、4という名前のついた頂点を始点、1という名前のついた頂点を終点とする有向辺が存在します。
- a42=0もa12と同じ。
- a43=0.2>0により、4という名前のついた頂点を始点、3という名前のついた頂点を終点とする有向辺が存在します。
- a44=0.8>0により、4という名前のついた頂点を始点、4という名前のついた頂点を終点とする有向辺が存在します。
すなわち、頂点4にはループ辺が存在します。
以上のことをまとめると、グラフは以下です。

実は、Bの正体が上記のグラフの隣接行列です。
で、隣接行列って何ですか?
先程行ったのは、行列に対してグラフを対応付ける、ということでした。
逆に、有限な有向グラフXoに付随する行列を構成することが出来ます。
これが隣接行列です。
隣接行列
有限な有向グラフXo=(V,Eo)に対して、Vに番号付けして、頂点の集合をV={1,…,n}とする。i,j∈Vに対して、要するに、隣接行列というのはグラフの頂点の繋がり方を表現している行列のことです。
上記の
を数式で書けば、
aij=|{e∈Eo|o(e)=i, t(e)=j}|
です。
補足
隣接行列のところで、「Vに番号付けして、頂点の集合をV={1,…,n}とする。」と書きました。実は、厳密に考えるとこれはちょっと説明が足りていません。
以前の記事で、グラフX=(V,E)の頂点の集合Vと辺の集合Eは、V∩E=∅を満たしさえすれば何でも良いわけで、Vを椅子、Eを机の集合としても良い、という話をしました。
この立場にたてば、仮にVを椅子の集合とした場合、V={1,…,n}とは厳密にはなりえません。
しかし、机やら椅子やらを○個、○脚と数えるように、「モノ」に対して「数」を全単射で対応させることが出来ます。
つまり、「Vに番号付けして、頂点の集合をV={1,…,n}とする。i,j∈Vに対して、」という文言を厳密に書くとすれば、
このように、全単射が存在するが故に、2つの集合を同一と捉え、厳密には等しくないものを同一視する、ということが数学ではよくあります。
例3. 次の有限な有向グラフの隣接行列を求めてみます。

頂点が4つあるので、隣接行列は(4,4)型です。
- a11
1と名前がついた頂点にはループ辺が1つ存在するので、a11=1です。 - a12
始点を1、終点を2とする有向辺は存在しないのでa12=0です。 - a13
始点を1、終点を3とする有向辺が1つ存在するのでa13=1です。 - a14
始点を1、終点を4とする有向辺は存在しないのでa14=0です。 - a21
始点を2、終点を1とする有向辺が1つ存在するのでa21=1です。 - a22
2と名前がついた頂点にはループ辺が存在しないので、a22=0です。 - a23
始点を2、終点を3とする有向辺は存在しないのでa23=0です。 - a24
始点を2、終点を4とする有向辺が2つ存在するのでa21=2です。 - a31
始点を3、終点を1とする有向辺は存在しないのでa31=0です。 - a32
始点を3、終点を2とする有向辺は存在しないのでa32=0です。 - a33
3と名前がついた頂点にはループ辺が1つ存在するので、a33=1です。 - a34
始点を3、終点を4とする有向辺は存在しないのでa34=0です。 - a41
始点を4、終点を1とする有向辺は存在しないのでa41=0です。 - a42
始点を4、終点を2とする有向辺は存在しないのでa42=0です。 - a43
始点を4、終点を3とする有向辺が1つ存在するのでa43=1です。 - a44
4と名前がついた頂点にはループ辺が存在しないので、a22=0です。
以上をまとめると、このグラフの隣接行列は
(1010100200100010)
です。
隣接行列の転置行列
隣接行列の転置行列について考えてみます。
A=(aij)の転置行列A⊤はajiを(i,j)成分にもつ行列です。
これを隣接行列の視点で見てみると、始点をj、終点をiとするグラフの隣接行列担っています。
故に、隣接行列の転置行列は有向グラフの全ての有向辺を逆向きにした有向グラフの隣接行列を指しています。
命題4.
有向グラフXoの隣接行列をA=(aij)とする。このとき、Xoの有向辺の向きを全て逆向きにして得られる有向グラフXo⊤の隣接行列は、A⊤である。命題4.の証明
Xo⊤の隣接行列をB=(bij)とします。
このとき、bijはXo⊤において、iからjに向かう有向辺の数です。
これはXoにおいてjからiに向かう有向辺の数です。
故に、aji=bijとなり、証明完了です。
命題4.の証明終わり
皆様のコメントを下さい!
筆者が幾何学を専攻しようと思ったきっかけが本シリーズのグラフ理論ですが、それよりも前から幾何学模様が好きでした。
キレイだなあ、と思っていました。
思えば、小学校、中学校のころから図形の問題は得意でした。
一方で、中学生の頃は比例や1次関数が大の苦手でした。
「全然分からん」という感じでした。
にもかかわらず、高校に入り、微分積分を勉強するととたんに一番得意な分野になりました(高校生の時は)。
皆様は小中で得意だったことと高校で得意だったことは変わりましたか?
是非コメントで教えて下さい!
結
今回は、有向グラフ、隣接行列について解説しました。
それぞれ
- 有向グラフ:全ての辺に1つの向きが定まっているグラフ。
- 隣接行列:グラフの頂点の繋がり方を表す正方行列。
です。
次回は隣接行列の既約、可約と強連結について解説します。
乞うご期待!
質問、コメントなどお待ちしております!
どんな些細なことでも構いませんし、「定理〇〇の△△が分からない!」などいただければ全てお答えします!
お問い合わせの内容にもよりますが、ご質問はおおよそ3日以内にお答えします。
もし直ちに回答が欲しければその旨もコメントでお知らせください。直ちに対応いたします。
この記事の内容をより詳しく知りたい方は以下の書籍を御覧ください!
コメントをする