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 31 2 1
2 3 1
1 3 1
3 31 2 1
1 2 3
2 3 1
sample output
3it'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個節點跑出來的最短路徑,是...