/*
[使い方]
まず始めに、グラフGを頂点数nで初期化して辺を追加する
    G.resize(n);
    G[a].push_back(b);等
次に最短距離を格納する、長さが頂点数で初期値-1の配列を用意する
    vector<long long> distance(n,-1);
最後にXとstartを決めて幅優先探索を実行する(Xの条件が必要ないなら適当にn+1とかを入れる)
    bfs(distance,10,0);
配列に最短距離が格納される(到達できないときは-1のまま)
*/
vector<vector<long long>> G;
//始点startからX回以内の移動でたどりつける頂点の最短距離を求める(到達できないなら-1)
void bfs(vector<long long> &dist, long long X, long long start)
{
    queue<long long> que;
    dist[start] = 0;
    que.push(start);
    while (!que.empty())
    {
        long long v = que.front();
        que.pop();
        if (dist[v] == X)
            continue;
        for (auto next_v : G[v])
        {
            if (dist[next_v] != -1)
                continue;
            dist[next_v] = dist[v] + 1;
            que.push(next_v);
        }
    }
}
    
    
© 2020 kacho65535