從蘋果節點不斷向父節點的方向走
需要解決的是:
1.得到每個節點的父節點
2.防止在向父節點走時重複計算
首先由題設輸入構造鄰接表,已知節點0是根節點,由此可通過dfs得到所有節點的根節點,儲存在vector中
構建dfs函式,由於鄰接表為無向圖的鄰接表,為防止兩節點互相認作父節點,引數中需包含上次遍歷的根節點,dfs函式中的鄰接表引數注意得是傳引用,若是傳值呼叫,每次呼叫都會發生拷貝構造,會導致超時
為防止在向父節點走時重複計算,使用visited陣列儲存已訪問過的節點,遍歷所有節點,若為蘋果節點且未被訪問過,開始不斷向父節點方向走,從蘋果節點開始走到第乙個已被訪問的節點或走到根節點即停止,注意向父節點走的迴圈為do…while迴圈
將得到的結果*2後返回
class
solution}}
intmintime
(int n, vector
int>>
& edges, vector<
bool
>
get_father
( adj,0,
-1,father )
;int ans=0;
for( i=
0;i)while
( j!=0&&
!visited[j]);
}}return ans*2;}};
訪問所有點的最小時間
平面上有 n 個點,點的位置用整數座標表示 points i xi,yi 請你計算訪問所有這些點需要的最小時間 以秒為單位 你可以按照下面的規則在平面上移動 每一秒沿水平或者豎直方向移動乙個單位長度,或者跨過對角線 可以看作在一秒內向水平和豎直方向各移動乙個單位長度 必須按照陣列 現的順序來訪問這些...
1266 訪問所有點的最小時間
package com.leetcode.easy 1266.訪問所有點的最小時間 平面上有 n 個點,點的位置用整數座標表示 points i xi,yi 請你計算訪問所有這些點需要的最小時間 以秒為單位 你可以按照下面的規則在平面上移動 每一秒沿水平或者豎直方向移動乙個單位長度,或者跨過對角線 ...
1266 訪問所有點的最小時間
對於平面上的兩個點 x x0,x1 和 y y0,y1 設它們橫座標距離之差為 dx x0 y0 縱座標距離之差為 dy x1 y1 對於以下三種情況,我們可以分別計算出從 x 移動到 y 的最少次數 dx dy 沿對角線移動 dx 次,再豎直移動 dy dx 次,總計 dx dy dx dy 次 ...