多源BFS
阿新 • • 發佈:2021-02-19
技術標籤:藍橋杯
多源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});//並且入隊 } } } } }