弗洛伊德演算法:
(1)弗洛伊德演算法求出任意兩點間的最短路,然後求出每個點到所有可到達點的最大距離,記為 m[i]
(2)r1=max( m [ i ] )
(3)列舉不聯通的兩個點 i , j,把它們聯通,則新的直徑是m[i]+m[j]+dist(i,j)
(4)r2=min( m[i] + m[j] + dist( i , j ) )
(5)re=max ( r1 , r2 )
**:
#include#include#include
#include
#include
#include
using
namespace
std;
intn;
char
ch;int a[151][3
];double f[151][151],maxt=1e12,minx=1e20,temp,m[151
];double dist(int x,int
y)int
main()
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=k&&i!=j&&j!=k)
if(f[i][k]1&&f[k][j]1) //
確保連通
if(f[i][j]>f[i][k]+f[k][j])
f[i][j]=f[i][k]+f[k][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(f[i][j]1&&m[i]//
(1)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j&&f[i][j]>maxt-1
)
//(4)
for(int i=1;i<=n;i++)
if(m[i]>minx) //
(2)(5)
minx=m[i];
printf(
"%.6lf
",minx);
return
0;
}
1343 例4 2 牛的旅行
農民john的農場裡有很多牧區。有的路徑連線一些特定的牧區。一片所有連通的牧區稱為乙個牧場。但是就目前而言,你能看到至少有兩個牧區不連通。現在,john想在農場裡新增一條路徑 注意,恰好一條 對這條路徑有這樣的限制 乙個牧場的直徑就是牧場中最遠的兩個牧區的距離 本題中所提到的所有距離指的都是最短的距...
牛的旅行 Floyed Warshall
原題鏈結傳送門 d es crip tion description descri ptio n農民john的農場裡有很多牧區。有的路徑連線一些特定的牧區。一片所有連通的牧區稱為乙個牧場。但是就目前而言,你能看到至少有兩個牧區不連通。這樣,農民john就有多個牧區了。john想在農場裡新增一條路徑 ...
牛的旅行 題解
農民joh njohn john 的農場裡有很多牧區。有的路徑連線一些特定的牧區。一片所有連通的牧區稱為乙個牧場。但是就目前而言,你能看到至少有兩個牧區不連通。這樣,農民joh njohn john 就有多個牧區了。j oh njohn john 想在農場裡新增一條路徑 注意,恰好一條 對這條路徑有...