一、題目二、輸入
輸入檔案包含多組測試資料。對於每組測試資料,第一行乙個整數n (n<=10000),接下來有n-1行,每一行兩個數,對於第i行的兩個數,它們表示與i號電腦連線的電腦編號以及它們之間網線的長度。網線的總長度不會超過10^9,每個數之間用乙個空格隔開。
三、輸出
對於每組測試資料輸出n行,第i行表示i號電腦的答案 (1<=i<=n).
四、樣例輸入輸出
input
5output1 12 1
3 11 1
323五、解題思路44
圖的遍歷,類似於求樹的直徑。
求i號電腦到其他電腦的最長路徑,可以轉換為總最長路的兩個節點v1、v2到i號電腦的路徑中較長的那個,本題因為無法確定往哪邊走是最長的路徑,所以需要先找到v1,v2,再分別從v1,v2開始遍歷,一共三次遍歷。
通過dfs思想實現遍歷,邊可以使用鄰接表進行儲存,對已經走過的點進行標記處理。通過從v1、v2開始的兩次遍歷記錄v1、v2到i號電腦的距離,二者中取較大的就是i號電腦到其他電腦的最長路徑。
六、**樣例
#include
#include
using
namespace std;
struct edge};
vector e[
10005];
int dis[
10005];
int ans1[
10005];
int ans2[
10005];
void
add(
int u,
int v,
int w)
//後繼插入雙向
void
find
(int u,
int d,
int*dis)
//查詢這個點到其他點的距離
}int n;
intmain()
for(
int i=
0;i<
10005
;i++
)//初始化
int v,w;
for(
int i=
2;i<=n;i++
) dis[1]
=0;//第一次遍歷,隨便找乙個點
find(1
,0,dis)
;/* for(int i=1;i<=n;i++)
cout0,j;
for(
int i=
1;i<=n;i++
)//最遠的點
}// cout;find
(j,0
,ans1)
;/* for(int i=1;i<=n;i++)
coutfor(
int i=
1;i<=n;i++
)//最遠的點 }
ans2[j]=0
;find
(j,0
,ans2)
;/* for(int i=1;i<=n;i++)
cout(int i=
1;i<=n;i++
)for
(int i=
1;i<=n;i++
) cout<<}return0;
}
第六章作業
例題6.1 舉例說明了指標的幾種表示形式,p指向指標指向的變數,p指向該變數的儲存位址,例題6.1 指標的幾種形式 自動化1121 李慶典 include 預編譯處理命令 using namespace std 標準名字空間 int main q 0 cout string1 is cout 例題6...
第六章作業
6.12 要求 1 建立基類area cl的兩個派生類rectangle與isosceles,讓每乙個派生類都包含乙個函式area 分別用來返回矩形與三角形的面積。用建構函式對height與width進行初始化。2 寫出主程式,用來求height與width分別為10.0與5.0的矩形面積,以及求h...
作業第六章
一簡答題 1.說明在迴圈結構中break和continue語句的區別。答 break語句 用於終止某個迴圈,程式跳轉到迴圈體外的下一條語句。continue語句 用於跳出本次迴圈,進入下一次迴圈。2.使用for迴圈結構實現 從鍵盤上輸入接收從周一到周五每天學習時間 以小時為單位 並計算每日平均學習時...