floyd應用心得

2021-06-10 00:06:04 字數 2707 閱讀 5227

***************===

1.巧用floyed思路確定樹中節點的關係

題目描述:

今天的問題是求子樹大小。

輸入一棵樹(樹的度最大為10),求每棵子樹大小,請輸出以每棵子樹的節點總數。

輸入檔案:tree.in

第一行:n(結點個數,n<=100),m(邊數)。

以下m行;每行兩個結點x和y,表示y是x的孩子。

輸出檔案:tree.out

依次輸出以1..n號節點為根的子樹節點總數(即按根節點編號從小到大的順序輸出)

樣例輸入:

8 72 7

2 62 8

4 14 2

1 51 3

樣例輸出:

3 4 1 8 1 1 1 1

樣例說明:輸入資料即上圖的一棵樹,樣例輸出表示以1號節點為根的子樹共有3個節點,以2號節點為根的子樹共有4個節點,依次類推。

[delphi]view plain

copy

var f:array[1..100,1..100] of

boolean;

p:array[1..100] of

integer;

i,j,k,n,m:integer;  

begin

readln(n,m);  

for i:=1

to m do

begin

readln(x,y);  

f[x,y]:=true;  

end;  

for k:=1

to n do

for i:=1

to n do

for j:=1

to n do

if f[i,k] and f[k,j] then f[i,j]:=true;  

for i:=1

to n do

for j:=1

to n do

if f[i,j] then inc(p[i]);  

for i:=1

to n do

write(p[i]+1,' ');  

end.  

2.改進floyed方法求最小環

[delphi]view plain

copy

min:=maxint;  

for k:=1

to n do

begin

for i:=1

to k-1

dofor j:=i+1

to k-1

doif g[i,j]+g[i,k]+g[j,k]then min:=g[i,j]+g[i,k]+g[j,k];  

for i:=1

to n do

for j:=1

to n do

if g[i,k]+g[k,j]then g[i,j]:=g[i,k]+g[k,j];  

end;  

writeln(min);  

3.多種方法解決同一問題

問題c: 奇怪的電梯 ( lift.pas )

問題描述:

呵呵,有一天我做了乙個夢,夢見了一種很奇怪的電梯。大樓的每一層樓都可以停電梯,而且第i層樓(1<=i<=n)上有乙個數字ki(0<=ki<=n)。電梯只有四個按鈕:開,關,上,下。上下的層數等於當前樓層上的那個數字。當然,如果不能滿足要求,相應的按鈕就會失靈。例如:3 3 1 2 5代表了ki(k1=3,k2=3,……),從一樓開始。在一樓,按「上」可以到4樓,按「下」是不起作用的,因為沒有-2樓。那麼,從a樓到b樓至少要按幾次按鈕呢?

輸入格式:

輸入檔案共有二行,第一行為三個用空格隔開的正整數,表示n,a,b(1≤n≤200, 1≤a,b≤n),第二行為n個用空格隔開的正整數,表示ki。

輸出格式:

輸出檔案僅一行,即最少按鍵次數,若無法到達,則輸出-1。

分析:建圖1]確定節點:以第i層樓為i號節點,共n個節點。

2]確定邊:從本題易知,邊為第i樓到第j樓轉換所需代價g[i,j]。由於本題連通的每層樓之間轉換的代價為1次,所以確定g[i,j]:=1;若兩層樓不能互通,則令g[i,j]:=maxint;

3]用程式構圖

[delphi]view plain

copy

for i:=1

to n do

for j:=1

to n do g[i,j]:=maxint;  

for i:=1

to n do

begin

if i+k[i]<=n then g[i,i+k[i]]:=1;  

if i-k[i]>=1

then g[i,i-k[i]]:=1;  

end;  

問題實質:最短路徑

法1(floyed):

[delphi]view plain

copy

for u:=1

to n do

for i:=1

to n do

for j:=1

to n do

if g[i,u]+g[u,j]then g[i,j]:=g[i,u]+g[u,j];  

if g[a,b]then

writeln(g[a,b]) else

writeln(-1);  

領域模型驅動應用心得

幾乎每種語言 開發框架和工具面世時,都號稱要把開發人員解放出來,讓他 她們更加關注於業 務邏輯的處理。但目前的工作狀況是,每當乙個新的 解放工具 出現,就會有眾多的技術狂熱者蜂擁而上,而忽略了他們最應該關注的業務邏輯部分。還好,從 2004年開始,領域驅動設計 的聲音開始浮現,開始逐漸扭轉這種局面。...

frameset 使用心得

欲明白本篇 html徹底剖析 之標記分類,請看 標記一覽 也請先明白圍堵標記與空標記的分別,請看 html概念 框架概念 謂框架便是網頁畫面分成幾個框窗,同時取得多個 url。只需要 即可,面所有框架標記需要放在乙個總起的 html 檔,這個檔案只記錄了該框架如何分割 不會顯示任何資料,所以不必放入...

Access使用心得

今天臨時用access做資料庫,長期用sql server開發習慣了,總結一下現在為止用到的比較大的差異,以後有新的再補了 1 返回字串長度 len s lenb s 前者返回字元數,後者返回位元組數,並且access中text型別字元統一為2位元組,與sql2000不同。2 join的使用 acc...