vijosp1046 觀光旅遊
【思路】
floyd求解最小環。
【**】
1 #include2view codeusing
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 }
【參考**及原理】
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至...