最小環權值 floyd

2021-07-16 21:55:05 字數 2160 閱讀 7525

find the mincost route

time limit:2000msmemory limit:32768kb64bit io format:%i64d & %i64u

submit

status

practice

hdu 1599

description

杭州有n個景區,景區之間有一些雙向的路來連線,現在8600想找一條旅遊路線,這個路線從a點出發並且最後回到a點,假設經過的路線為v1,v2,....vk,v1,那麼必須滿足k>2,就是說至除了出發點以外至少要經過2個其他不同的景區,而且不能重複經過同乙個景區。現在8600需要你幫他找一條這樣的路線,並且花費越少越好。 

input

第一行是2個整數n和m(n <= 100, m <= 1000),代表景區的個數和道路的條數。 

接下來的m行裡,每行包括3個整數a,b,c.代表a和b之間有一條通路,並且需要花費c元(c <= 100)。

output

對於每個測試例項,如果能找到這樣一條路線的話,輸出花費的最小值。如果找不到的話,輸出"it's impossible.".

sample input

3 3

1 2 1

2 3 1

1 3 1

3 31 2 1

1 2 3

2 3 1

sample output

3

it's impossible.

#include#include#includeusing namespacestd;#define inf 0xffffff

intmap[110][110],dis[110][110];

intmain

()for

(inti=1;i<=m;i++)

for(

inti=1;i<=n;i++)

for(

intj=1;j<=n;j++)dis[i][j]=map[i][j];

intans=inf;

for(

intk=1;k<=n;k++)

//環的權值=(i--k)+(k--j)+(i--j)

for

(inti=1;i<=n;i++)

}if(ans==inf)printf("it's impossible.\n");

elseprintf("%d\n",ans);

}return0;

}

Floyd演算法(改進後求最小環權值)

int gra maxs maxs dis maxs maxs 返回值為最小環權值.int floyd int n return mincircle 求當前最小環權值在更新dis之前是因為。當前的k不應該被連入dis i j 中。也就是說當前迭代求mincircle是對之前已求dis i j 包含k...

floyd求最小環

floyd求最小環 1 定義 通常來說最小環是針對有向圖而言 從乙個點出發,經過一條簡單路徑回到起點成為環.圖的最小環就是所有環中長度最小的.2.怎樣求最小環呢?的解決方法 dijkstra 任意乙個環的權值,我們都可以看成兩個有邊相連的結點i j的直接距離加上i j間不包含邊 邊i j 的最短路徑...

floyd求最小環

其實floyd求最小環就相當於找出乙個一條只包括1到k 1中節點的路徑,然後把這個路徑與k這個節點相連。這樣是正確的原因是,最小環中一定有乙個最大節點k,當最外層節點是k時,我們一定會列舉到k兩端的兩個節點,這樣就統計出了答案。至於為什麼不能直接用最短路徑,而是要用前k 1個節點跑出來的最短路徑,是...