Floyd演算法 觀光之旅

2021-10-04 19:16:13 字數 1322 閱讀 5321

給定一張無向圖,求圖中乙個至少包含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...