vijosP1046 觀光旅遊(最小環)

2021-07-10 20:54:12 字數 2162 閱讀 2376

vijosp1046 觀光旅遊

【思路】

floyd求解最小環。

【**】 

1 #include2

using

namespace

std;34

const

int maxn = 100+10;5

const

int inf=1e8;

6int

f[maxn][maxn],dist[maxn][maxn];

7int

n,m,min_loop;89

void

floyd()

1024}25

26int

main()

36int

u,v,w;

37for(int i=0;i)

41floyd();

42if(min_loop==inf) cout<

no solution.\n";

43else cout

;44}45

return0;

46 }

view code

【參考**及原理】

1/*2

*演算法引入:

3*求乙個圖g中的最小環路的樸素演算法為:每次找到一條邊,刪除了求這兩點之間的最短路徑;

4*若能求出,則這條最短路徑與原來的邊構成乙個環,不過時間複雜度略高;5*

6*演算法思想;

7*floyd演算法是按照頂點的編號增加的順序更新最短路徑的;

8*如果存在最小環,則會在這個環中的點編號最大的那個點u更新最短路徑之前發現這個環;

9*即當點u被拿來更新i到j的最短路徑的時候,可以發現這個閉合環路;

10*發現的方法是,更新最短路徑前,遍歷i,j點對,一定會發現某對i到j的最短路徑長度:

11*dist[i][j]+map[j][u]+map[u][i]!=inf,這時s的i和j是當前環中挨著點u的兩個點;

12*因為在之前的最短路徑更新過程中,u沒有參與更新,所以dist[i][j]所表示的路徑中不會有點u,即一定為乙個環;13*

14*如果在每個新的點拿來更新最短路徑之前遍歷i和j驗證上面的式子,雖然不能遍歷到所有的環;

15*但是由於dist[i][j]是i到j點的最短路徑m所以肯定可以遍歷到最小的環;16*

17*如果有負權環,則該演算法失效,因為包含負環的圖上,dist[i][j]已經不能保證i到j的路徑上不會經過同乙個點多次了;18*

19*演算法測試:

20*pku1734(sightseeing trip)

21*/

2223 #include24 #include25 #include26 #include27 #include28 #include29 #include30

using

namespace

std;

3132

const

int n=111;33

const

int inf=0xffffff;34

35int

min_loop;

36int

num;

37int

map[n][n],dist[n][n],pre[n][n];

38int

path[n];

39int

n,m;

4041

void dfs(int i,int

j)42

49dfs(i,k);

50dfs(k,j);51}

5253

void

floyd()

5471}72

}7374for(int i=1; i<=n; i++)

7583}84

}85}86

}8788int

main()

8999

for(int i=0; i)

100108

}109

floyd();

110if(min_loop==inf)

111 puts("

no solution.");

112else

113118

}119

return0;

120 }

VIjosP1046觀光旅遊

背景 湖南師大附中成為百年名校之後,每年要接待大批的遊客前來參觀。學校認為大力發展旅遊業,可以帶來一筆可觀的收入。學校裡面有 個景點。兩個景點之間可能直接有道路相連,用dist i,j 表示它的長度 否則它們之間沒有直接的道路相連。這裡所說的道路是沒有規定方向的,也就是說,如果從i到j有直接的道路,...

codevs 2611 觀光旅遊

某旅遊區裡面有 個景點。兩個景點之間可能直接有道路相連,用a i j 表示它的長度,否則它們之間沒有直接的道路相連。這裡所說的道路是沒有規定方向的,也就是說,如果從i到j有直接的道路,那麼從j到i也有,並且長度與之相等。旅遊區規定 每個遊客的旅遊線路只能是乙個迴路 好霸道的規定 也就是說,遊客可以任...

觀光旅遊(最小環問題)

在桑給巴爾島的adelton城鎮上有乙個旅遊機構。它們決定在提供許多的其它吸引之外,再向客人們提供旅遊本鎮的服務。為了從提供的吸引服務中盡可能地獲利,這個旅遊機構接收了乙個精明決定 在相同的起點與終點之間找出一最短路線。你的任務是編寫一條程式來找類似的的一條路線。在這個鎮上,有n個十字路口 編號1至...