弗洛伊德思想

2021-09-17 18:22:43 字數 1310 閱讀 7367

湖中有n塊石頭,編號從1到n,有兩隻青蛙,bob在1號石頭上,alice在2號石頭上,bob想去看望alice,但由於水很髒,他想避免游泳,於是跳著去找她。但是alice的石頭超出了他的跳躍範圍。因此,bob使用其他石頭作為中間站,通過一系列的小跳躍到達她。兩塊石頭之間的青蛙距離被定義為兩塊石頭之間所有可能路徑上的最小必要跳躍距離,某條路徑的必要跳躍距離即這條路徑中單次跳躍的最遠跳躍距離。你的工作是計算alice和bob石頭之間的青蛙距離。

input

多例項輸入

先輸入乙個整數n表示石頭數量,當n等於0時結束。

接下來2-n+1行依次給出編號為1到n的石頭的座標xi , yi。

2 <= n <= 200

0 <= xi , yi <= 1000

output

先輸出"scenario #x", x代表樣例序號。

接下來一行輸出"frog distance = y", y代表你得到的答案。

每個樣例後輸出乙個空行。

(ps:wa有可能是精度問題,g++不對可以用c++嘗試,都不對就是**問題)

sample input

20 0

3 43

17 4

19 4

18 5

0sample output

scenario #1

frog distance = 5.000

scenario #2

frog distance = 1.414

題目大意

這個題目太繞了。。先解釋必要跳躍距離,就是從i到j 需要先從i到k,再從k到j,必要路徑就是這兩次中的較大的那個

最小必要路徑就是所有必要路徑中最小的那個

需要注意的是 最後的輸出不能用 .lf 只能用 .f不知道為啥

**如下

#include#include#include#include#includedouble e[210][210];

using namespace std;

int main()}}

} cout<<"scenario #";

cout《我這個**沒寫比較最小值。。過了

#include#include#include#include#includedouble e[210][210];

using namespace std;

int main()

e[i][j]=min(e[i][j],max(e[i][k],e[k][j]));}}

} cout<<"scenario #";

cout《改後的

弗洛伊德演算法

弗洛伊德演算法 floyd 又稱為是插點法。目的是求加權圖中頂點中最短路徑的方法。本文通過舉例子的方法想你具體解釋何為弗洛伊德演算法。有乙個送禮物的問題,是csdn上的乙個題目,題目的詳情是這樣的。hehe和xixi在乙個地方玩遊戲,xixi把n 1件禮物 hehe以前送給xixi的 分別藏在了另外...

弗洛伊德演算法

floyd演算法詳解 求解任意兩點間的最短距離 floyd warshall演算法,簡稱floyd演算法,用於求解任意兩點間的最短距離,時間複雜度為o n 3 我們平時所見的floyd演算法的一般形式如下 1void floyd 注意下第6行這個地方,如果dist i k 或者dist k j 不存...

弗洛伊德演算法

弗洛伊德演算法 求任意一點i到任意一點j的最短路。分析 求i到j的最短路,大可以使用群舉法,因為點都是離散的,i到j的路徑是有限的,所以一定可以通過群舉法得到最短路,但群舉法卻沒太大意義,他的意義在於 把群舉法 通過修改 進行分類,得到好的演算法。flod演算法的分類標準是 通過i到j過點的情況進行...