距離: BFSとダイクストラ
距離を求める際の,ダイクストラ, 0-1BFS, BFSのコーディング方法のまとめです. 記法 ノードを表すデータ型を Node とする. int や long long や pair<int, int> など. ダイクストラ 前提: ノード間の距離δ(x,y)が全部非負 距離の候補を優先度付きキューに入れていく. あるノードがキューから初めて取り出されたときにそのノードへの距離が確定する. 使用するデータと初期化 priority_queue のメソッドは,push(), emplace(), pop(), top() など. using P = pair<ll, Node>; // 距離とノード priority_queue<P, vector<P>, greater<P>> pque; // 優先度付きキュー // 値 (d, x) は,ノードxへ,長さdのパスがあることを示す. pque.emplace(0, initial_node); // 始点をキューに vector<ll> dist(N, LLONG_MAX); // 距離.始点以外は∞ // Node型 によっては,map<Node, ll> dist; など. dist[initial_node] = 0; // 始点の距離は0 ループ pque から取り出した (d, x) について, dist[x] < d なら,もっと良い d があって, それが既に取り出されている,ということなので,単に捨てる. そうでなければ (dist[x] == d ならば) この d が x への最短距離であることが確定した. x の 各隣接ノード y について,newd = x + δ(x, y) が y への距離の候補なので以下を行う. dist[y] <= newd なら,単に捨てる. そうでなければ,次を行う. dist[y] を newd に更新する. (newd, y) を pque に入れる. ゴール...