收集樹上所有蘋果的最小時間

2021-10-08 19:41:31 字數 933 閱讀 3986

從蘋果節點不斷向父節點的方向走

需要解決的是:

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 次 ...