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番目に最短距離の経路を求めてみよう