Transcript グラフ

ICPC講座
グラフ(ダイクストラ法)
頂点
グラフとは?
 物や状態同士の関係を頂点と変で表現
したもの.
 頂点は対象(物や状態)を円や点で表現
する.
 その頂点の関係性を辺(直線)で結ぶ.
 問題の多くがグラフの問題に帰着する.
そのため,多くのアルゴリズムが考え
出されている.
辺
大宮
身近なグラフの例
上野
八王子
横浜
新宿
東京
グラフの詳細と用語解説
パスと閉路
D
C
パスとは?
隣接している頂点の列
例)AからD
B
A
閉路とは?
始点と終点が同じパスのこと
例)AからA
連結
連結している
連結していない
重み
 辺の属性
 代表的な重みとしてはコスト
 重みのついたグラフを“重み付きグラフ“と呼ぶ
八王子
480円
48分
新宿
グラフの種類
無向グラフ
有向グラフ
無向グラフ
 辺に向きがない
 路線図も無向グラフ
 頂点=辺-1の関係
 閉路がない無向グラフを“木”と
呼ぶ
 そして,任意の頂点を選び,そ
の頂点が上,それ以外を下に配
置すると,“根付き木”になる.
“木“と”根付き木”のイメージ図
木
根付き木
有向グラフ
 辺に向きがあるグラフ
 フローチャートも有向グラフの一種
 右の図のように矢印の方向にぐるぐ
る回れるパスを閉路.回れないパス
は閉路ではない.
 有向グラフで閉路を持たないグラフ
を“DAG”という.
DAG例
DAGは下のグラフのように閉路がない状態.
緑に注目してみると黄色にたどり着いている.
これを使ってグラフを整理してみよう.
トポロジカル順序
各頂点に対して番号を振り,i番目の頂点をViとする.
頂点Viから頂点Vjに向かって辺がある時,i<jが成り立つような番号の付け方を
トポロジカル順序という.
1
2
3
4
また,トポロジカル順序で番号を振り,右から左へ並べ替えることを
トポロジカルソートという
5
6
問題
 頂点数nの無向グラフが与えられる.隣接している頂点同士が違う色になるように,
頂点に色を塗っていく.この時,2色以内ですべての頂点を塗ることができるか判
定しなさい.制約:1 ≤ 𝑛 ≤ 1000
 入出力例:
 入力
2
出力
NO
 入力
4
出力
YES
ヒント!
 一つの頂点の色が決まれば隣接する頂点の色が決まる
 順次適当な頂点から隣接する頂点の色を順次決めていけば判定できる
→深さ優先探索を使おう
ヒント2!
データの表現方法
 主に二つの方法がある
 行列で表現する.
 この問題ではi番の頂点とj番の頂点が変で結ばれているかどうかわかればいい.
 0と1で行列を書いてみよう
 リストで表現する
 行列だと頂点の数だけどの頂点に結ばれているか否かを全てを網羅するのでメモリを大量に消
費する欠点がある.
 「頂点0から頂点2,4,6に辺がある」のように必要な情報だけリストで表現する.
 時間があったらやってみよう
問題2
 R本の道とN個の交差点がある街がある.道路は両方向に通行可能.1番の交差点
からN番(今回は4番)の交差点までの最短経路を求めなさい.今回は下のグラフを
計算に使うこと.
1
100
2
200
4
100
250
3
ヒント(ダイクストラ法)
 ダイクストラ法とはスタートの頂点からゴールの頂点までの最短経路と最短距離
を求めるアルゴリズム.
1. 隣接している頂点の中で最短距離の物を探し,頂点にまでかかる重みを更新.
2. 最短距離が確定した頂点を考えずに,手順1に戻る.
ダイクストラ法手順
最短距離
100
1
100
2
頂点へのコスト更新
200
4
100
250
3
ダイクストラ法手順
この頂点は考えない
100
1
100
2
200
250
300
4
100
この二つの頂点への
コストを比べる
3
350
ダイクストラ法について
わかり易いウェブページ
 deq notes
http://www.deqnotes.net/acmicpc/dijkstra/
時間があったら・・・
 問題2のグラフで2番目に最短距離の経路を求めてみよう