原創 重新規劃路線 BFS 鄰接表 解釋

2022-08-25 09:27:10 字數 1380 閱讀 8864

n 座城市,從 0 到 n-1 編號,其間共有 n-1 條路線。因此,要想在兩座不同城市之間旅行只有唯一一條路線可供選擇(路線網形成一顆樹)。去年,交通運輸部決定重新規劃路線,以改變交通擁堵的狀況。

路線用 connections 表示,其中 connections[i] = [a, b] 表示從城市 a 到 b 的一條有向路線。

今年,城市 0 將會舉辦一場大型比賽,很多遊客都想前往城市 0 。

請你幫助重新規劃路線方向,使每個城市都可以訪問城市 0 。返回需要變更方向的最小路線數。

題目資料 保證 每個城市在重新規劃路線方向後都能到達城市 0 。

n = 6, connections = [[0,1],[1,3],[2,3],[4,0],[4,5]]

3目的是遍歷所有的點,把不指向0點的路徑都記錄下來,這樣的路徑和就是答案。

建議乙個鄰接表,其中每個點儲存的是和他有關聯的點,cost根據後面的需要設定。

對於(u, v)有:

bfs從0點開始遍歷,得出結果。

在遍歷的時候我們查詢的是u: [v, cost], 我們希望可以從v到達u所以u: [v, cost]中cost為1(需要改變方向)。同理v: [u, 0]

所以在構造鄰接表時,對於(u, v)有:

在調整完與0點相連的路線後,我們依次調整與(可以通向0點的點)相連的點,這裡使用佇列來處理。

(可以通向0點的點)相連的點,包括我們處理過點,當處理我們已經處理的過的點時,我們選擇跳過。使用陣列來表示處理過的點。

/**

* @param  n

* @param  connections

* @return 

*/var minreorder = function (n, connections) ;

// 建立乙個鄰接表,其中每個點儲存的是和他有關聯的點,cost根據題目需要設定。

// 對於 (u, v)有: u:[v, cost]  v:[u, cost]

// 我們從u開始遍歷,對於(u, v)我們希望v可以到達u,所以

// u:[v, 1]需要改變方向, v:[u, 0]不需要改變方向

for (let i = 0; i < connections.length; i++) 

let queue = [0]; // 我們想要通往的城市

let seen = new array(n).fill(false); // 我們處理過的城市

let ans = 0;

// 要想保證都能到達城市0,就需要與0連線的城市都能達到城市0, (與可以到達城市0的城市)相連的城市可以到達(與可以到達城市0的城市)

while (queue.length) 

}  return ans;

};

尋寶路線 動態規劃

else if i m 1 到達底端,就只能往右走 else if j n 1 到達右端,只能往下走 else 否則在這一點能夠獲得的最大價值就是該點的寶物價值加上往右或者往下走能夠獲得的最大價值 int s int i,int j else int main printf d dp 0,0 put...

動態規劃練習 移動路線

題目要求 桌子上有乙個m行n列的方格矩陣,將每個方格用座標表示,行座標從下到上依次遞增,列座標從左至右依次遞增,左下角方格的座標為 1,1 則右上角方格的座標為 m,n 小明是個調皮的孩子,一天他捉來乙隻螞蟻,不小心把螞蟻的右腳弄傷了,於是螞蟻只能向上或向右移動。小明把這只螞蟻放在左下角的方格中,螞...

動態規劃3 移動路線

描述 桌子上有乙個m行n列的方格矩陣,將每個方格用座標表示,行座標從下到上依次遞增,列座標從左至右依次遞增,左下角方格的座標為 1,1 則右上角方格的座標為 m,n 小明是個調皮的孩子,一天他捉來乙隻螞蟻,不小心把螞蟻的右腳弄傷了,於是螞蟻只能向上或向右移動。小明把這只螞蟻放在左下角的方格中,螞蟻從...