グラフ(辞書型編)
グラフ は、対象物の関係性 を表します。
グラフ を使うと、友人関係・鉄道路線・タスクの依存関係など、さまざまな関係性を表現できます。
関係性を グラフ で表すと、問題を抽象的に考えることができるというメリットがあります。
問題
次のような問題があります。
[問題]
頂点数がN個、辺数がM本であるような無向グラフ(辺の向きがないグラフ)があります。 頂点は隣接する頂点の情報(複数)を持っています。 それぞれの頂点は色の情報をもっており、色の情報は塗り替えることができます。 クエリ―は2種類あり下記のような操作を行います。 クエリ―1:1 aという形式で情報が与えられ、頂点aに隣接する頂点 の色が 頂点aの色 に塗り変えられます。 クエリ―2:2 a bという形式で情報が与えられ、頂点a の色が 色b に塗り替えられます。
[条件]
・頂点数Nは1以上200以下の整数 ・変数MはN(N-1)/2以下の整数 ・クエリ―数Qは1以上200以下の整数
解法・ソースコード
頂点と辺、色の情報を辞書型の変数で管理します。
辞書型のキーには 頂点のID を設定し、辞書型の値として 色情報と隣接する頂点 の情報を辞書型データとして設定します。
クエリ―ごとに各頂点の色情報を更新し、最後に各頂点の色情報を表示しています。
[Google Colaboratory]
1 | #---------- 入力例 ---------- |
[実行結果]
【初期のカラー情報】 node[1]: color[5] node[2]: color[10] node[3]: color[15] ------- クエリ― (1, 2) (カラー情報) node[1]: color[10] node[2]: color[10] node[3]: color[10] ------- クエリ― (2, 1, 20) (カラー情報) node[1]: color[20] node[2]: color[10] node[3]: color[10] ------- クエリ― (1, 1) (カラー情報) node[1]: color[20] node[2]: color[20] node[3]: color[10] ------- 【解:カラー情報】 node[1]: color[20] node[2]: color[20] node[3]: color[10]
1番目のクエリ―により、頂点2に隣接する全ての頂点の色が10に塗り替えられます。
2番目のクエリ―により、頂点1の色が色20に塗り替えられます。
3番目のクエリ―により、頂点1に隣接する全ての色が20に塗り替えられます。
最終的には、頂点1の色が20、頂点2の色が20、頂点3の色が10になっていることが確認できます。