1. 程式人生 > 其它 >多源BFS

多源BFS

技術標籤:藍橋杯

多源BFS,即同時存在多個起點,然後要求計算出圖中任意一個點距離所有起點的最短距離,即圖中任意點到每個起點的距離的最小值。 和一般的BFS的區別在於存在多個起點,而我們可以對所有的起點建立一個虛擬超級起點S,S與所有給定的起點一步相鄰。設S到點A的最短距離為x,則 min(給定的所有起點中到A的最短距離) = x。

Step 1: 將所有的起點都加入佇列中

Step 2:

void bfs()//廣度優先遍歷
{
    int dx[] = {-1, 0 , 1, 0}, dy[] = {0, 1, 0,-1};//上下左右四個方向
    while(q.size())
    {
        PII f = q.front();//取隊頭
        q.pop();//出隊
        for(int i = 0; i < 4 ; i++)//向四個方向進行遍歷
        {
            int x = f.first + dx[i], y = f.second + dy[i];
            if(g[x][y] == 1)//如果能走過去
            {
                if(dist[x][y] > dist[f.first][f.second] + 1)//如果距離變小
                {
                    dist[x][y] = dist[f.first][f.second] + 1;//更新距離
                    q.push({x, y});//並且入隊
                }
            }
        }
    }
}