給定一張無向圖,求圖中乙個至少包含3個點的環,環上的節點不重複,並且環上的邊的長度之和最小。
該問題稱為無向圖的最小環問題。
你需要輸出最小環的方案,若最小環不唯一,輸出任意乙個均可。
輸入格式
第一行包含兩個整數n和m,表示無向圖有n個點,m條邊。
接下來m行,每行包含三個整數u,v,l,表示點u和點v之間有一條邊,邊長為l。
輸出格式
輸出佔一行,包含最小環的所有節點(按順序輸出),如果不存在則輸出』no solution.』。
資料範圍
1≤n≤1001≤n≤100,
1≤m≤100001≤m≤10000,
1≤l<5001≤l<500
輸入樣例:
5 71 4 1
1 3 300
3 1 10
1 2 16
2 3 100
2 5 15
5 3 20
輸出樣例:
1 3 5 2
注意:floyd演算法中k是i和j中間的乙個點,這裡採用變形,注意題目是讓按照順序輸出,卡了好久
#include
#include
#include
#include
using
namespace std;
const
int n =
110, inf =
0x3f3f3f3f
;int n, m;
int d[n]
[n], g[n]
[n];
int pos[n]
[n];
int path[n]
, cnt;
void
get_path
(int i,
int j)
intmain()
memcpy
(d, g,
sizeof d)
;int res = inf;
for(
int k =
1; k <= n; k ++
)for
(int i =
1; i <= n; i ++
)for
(int j =
1; j <= n; j ++)if
(d[i]
[j]> d[i]
[k]+ d[k]
[j])}if
(res == inf)
puts
("no solution.");
else
return0;
}
AcWIng344 觀光之旅(floyd求最小環)
求最小環的原理是dp的思想,我們以環中最大的節點作為斷點,這樣在求floyd的過程中,在更新之前,可以用i和k以及j和k相連的兩條線路以及原先i和j在前k 1已經求出的最短路當作環進行比較 因為我們分割出了所有情況。而在求取方案的時候,我們設定乙個pos陣列,表示最短路的分割點,進行遞迴求取 inc...
Floyd 文化之旅
noip2012 文化之旅 有一位使者要遊歷各國,他每到乙個國家,都能學到一種文化,但他不願意學習任何一 種文化超過一次 即如果他學習了某種文化,則他就不能到達其他有這種文化的國家 不 同的國家可能有相同的文化。不同文化的國家對其他文化的看法不同,有些文化會排斥外來 文化 即如果他學習了某種文化,則...
Floyd演算法思想
本來 量如此小的演算法不用出模板了,但是的確思想還是很好的。1.定義概覽 floyd warshall演算法 floyd warshall algorithm 是解決任意兩點間的最短路徑的一種演算法,可以正確處理有向圖或負權的最短路徑問題,同時也被用於計算有向圖的傳遞閉包。floyd warshal...