SlideShare a Scribd company logo
1 of 24
Download to read offline
グラフと木
グラフ
●頂点と辺の集合
●辺は頂点と頂点を結ぶ
●辺に向きがあるものを有向グラフ、向きのない
ものを無向グラフという
頂点
辺
無向グラフ
グラフ
●頂点と辺の集合
●辺は頂点と頂点を結ぶ
●辺に向きがあるものを有向グラフ、向きのない
ものを無向グラフという
頂点
辺
有向グラフ
グラフに関する用語
●道(パス):一続きの頂点の列
グラフに関する用語
●閉路(サイクル):始点と終点が同じパス
グラフに関する用語
●距離:2頂点を結ぶ最短の道の長さ
距離: 2
グラフに関する用語
●直径:距離の最大値
直径: 2
グラフに関する用語
●ループ:辺の両端が同じ頂点になっているもの
グラフに関する用語
●多重辺:辺の両端の組が等しい複数の辺
グラフに関する用語
●単純グラフ:ループも多重辺も無いグラフ
単純グラフでない
グラフに関する用語
●単純グラフ:ループも多重辺も無いグラフ
単純グラフである
グラフに関する用語
●連結グラフ:どの2点間にも道があるグラフ
連結でない
グラフに関する用語
●連結グラフ:どの2点間にも道があるグラフ
連結である
グラフに関する用語
●次数:頂点に接続している辺の本数
3
4
5
4
5
3
グラフに関する用語
●正則グラフ:全頂点の次数が等しいグラフ
4
4
4
4
4
4
グラフに関する用語
●完全グラフ:どの2点間にも辺があるグラフ
プログラムでグラフを扱う
●隣接行列
●頂点 から頂点 に伸びる辺の数を とする
●辺に情報がある場合、多重辺に対応できない
●メモリの制約上    ぐらいまでしか使えない
●実装は楽
●隣接リスト
●頂点 から伸びる辺のリストを  に格納する
●多重辺にも対応、頂点数が多くても大丈夫
i j aij
n≤1000
i a[i]
プログラムでグラフを扱う
●隣接行列
1
2
3
4
6
5
1 2 3 4 5 6
1 0 2 1 0 0 0
2 2 0 1 1 0 0
3 1 1 0 1 1 1
4 0 1 1 0 1 1
5 0 0 1 1 0 1
6 0 0 1 1 1 1
プログラムでグラフを扱う
●隣接リスト
1
2
3
4
6
5
1 2,2,3
2 1,1,3,4
3 1,2,4,5,6
4 2,3,5,6
5 3,4,6
6 3,4,5,6
木
●閉路のない連結グラフを木という
●辺に向きがあるものを有向木、向きがないもの
を無向木という
根付き木
●頂点の一つを「根」とすることがある
●その頂点の一つ上の頂点を「親」、一つ下の頂
点を「子」と呼ぶ
根
親
子
根付き木の表現
●隣接行列、隣接リストを使う
●親の頂点番号を格納した配列でも表現できる
●図にすると根に向かう有向木
木における全探索
●根から子をたどっていく
●深さ優先探索、幅優先探索
●根のない場合は適当な頂点を根にする
グラフにおける全探索
●すでに通った場所を保存しておく配列を用意
●各頂点について通ったなら1、通ってないなら0
●すでに通った場所に行かないように注意すれ
ば、木と同じように全探索できる

More Related Content

What's hot

What's hot (20)

平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム
 
Binary indexed tree
Binary indexed treeBinary indexed tree
Binary indexed tree
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
 
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
 
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
 
ノンパラベイズ入門の入門
ノンパラベイズ入門の入門ノンパラベイズ入門の入門
ノンパラベイズ入門の入門
 
Rolling Hashを殺す話
Rolling Hashを殺す話Rolling Hashを殺す話
Rolling Hashを殺す話
 
動的計画法を極める!
動的計画法を極める!動的計画法を極める!
動的計画法を極める!
 
最適輸送の解き方
最適輸送の解き方最適輸送の解き方
最適輸送の解き方
 
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドRe永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
 
勾配降下法の 最適化アルゴリズム
勾配降下法の最適化アルゴリズム勾配降下法の最適化アルゴリズム
勾配降下法の 最適化アルゴリズム
 
多人数不完全情報ゲームにおけるAI ~ポーカーと麻雀を例として~
多人数不完全情報ゲームにおけるAI ~ポーカーと麻雀を例として~多人数不完全情報ゲームにおけるAI ~ポーカーと麻雀を例として~
多人数不完全情報ゲームにおけるAI ~ポーカーと麻雀を例として~
 
AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)
 
グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜
 
Chokudai search
Chokudai searchChokudai search
Chokudai search
 
Rolling hash
Rolling hashRolling hash
Rolling hash
 
指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門
 
文字列アルゴリズム
文字列アルゴリズム文字列アルゴリズム
文字列アルゴリズム
 

More from 京大 マイコンクラブ

More from 京大 マイコンクラブ (20)

テキストファイルを読む💪 第1回
テキストファイルを読む💪  第1回テキストファイルを読む💪  第1回
テキストファイルを読む💪 第1回
 
かわいくなろうとしたら語彙力が下がった話
かわいくなろうとしたら語彙力が下がった話かわいくなろうとしたら語彙力が下がった話
かわいくなろうとしたら語彙力が下がった話
 
Common Lisp入門
Common Lisp入門Common Lisp入門
Common Lisp入門
 
多倍長整数の乗算と高速フーリエ変換
多倍長整数の乗算と高速フーリエ変換多倍長整数の乗算と高速フーリエ変換
多倍長整数の乗算と高速フーリエ変換
 
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタつくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
 
Geometry with Unity
Geometry with UnityGeometry with Unity
Geometry with Unity
 
セミコロンレスc++
セミコロンレスc++セミコロンレスc++
セミコロンレスc++
 
エンジニアと健康
エンジニアと健康エンジニアと健康
エンジニアと健康
 
女の子になれなかった人のために
女の子になれなかった人のために女の子になれなかった人のために
女の子になれなかった人のために
 
Pietで競プロしよう
Pietで競プロしようPietで競プロしよう
Pietで競プロしよう
 
もし太陽のコアがIntelCoreだったら
もし太陽のコアがIntelCoreだったらもし太陽のコアがIntelCoreだったら
もし太陽のコアがIntelCoreだったら
 
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
 
ドット絵でプログラミング!難解言語『Piet』勉強会
ドット絵でプログラミング!難解言語『Piet』勉強会ドット絵でプログラミング!難解言語『Piet』勉強会
ドット絵でプログラミング!難解言語『Piet』勉強会
 
No SSH (@nojima; KMC関東例会)
No SSH (@nojima; KMC関東例会)No SSH (@nojima; KMC関東例会)
No SSH (@nojima; KMC関東例会)
 
DTM練習会2017第1.5回 「伴奏の付け方」
DTM練習会2017第1.5回 「伴奏の付け方」DTM練習会2017第1.5回 「伴奏の付け方」
DTM練習会2017第1.5回 「伴奏の付け方」
 
hideya流 テストプレイ観察術
hideya流 テストプレイ観察術hideya流 テストプレイ観察術
hideya流 テストプレイ観察術
 
暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編
 
Altseed
AltseedAltseed
Altseed
 
C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回
 

グラフと木