問題描述:
1、在奧運場館選址初期,規劃師已經保證了所有場館之間都有直接或者間接的道路相連線。但是往往事與願違,奧運會期間巨大的交通壓力將使得部分道路變得格外的擁堵。如果兩個場館之間的平均車速在每小時20公里以下(<20),則認為該兩點之間的道路為不可以通行。那麼現在有遊客想駕車遊覽所有的奧運場館,假設遊覽一次意味著可以把所有能夠通行的場館全部參觀完,請問。 (1)根據給出的各條道路的資料確定參觀完所有場館需要分幾次進行? (2)按照每次能夠參觀的場館數從多到少的順序分別給出各次所能參觀的場館數,且從小到大依次輸出每次參觀的場館編號。
2、為了滿足奧運期間新聞報道的需要,場館間計畫鋪設光纖來傳輸新聞訊號。假設光纖必須沿著道路鋪設,不管該道路的平均車速是否超過20公里都可以用來鋪設光纖,消耗光纖長度與道路長度相等。為了節省資源,希望盡可能減少總的光纖使用量。請根據場館間所有道路(包括平均車速在20公里以下的)分布情況設計最優的光纖鋪設方案。 3、鑑於場館間的平均車速在每小時20公里以下(<20)的道路由於過分擁堵被認為是不可以通行的。場館規劃小組計畫把這些地面擁堵道路中的部分路線改造為地下道路來連通所有的場館,使得所有場館之間都可以直接或間接到達,這樣遊客駕車遊覽一次就可以把所有的場館都參觀完。假設改造後原有的地上道路改為步行街不再允許機動車通行,所有的地下道路均暢通無阻。請以所給的地面道路資料為依據,設計乙個最經濟(即被改造道路的總長度最短)的地下道路的建造方案。
演算法思路:
奧運場館間的道路長度和車速之間應該用帶權圖來表示,而這裡的權值應該包括兩個——道路長度和場館之間的車速。 l 圖的建立 採用鄰接矩陣的方式建立乙個帶權圖,在該程式裡採用了乙個表示圖的鄰接矩陣的結構體,乙個表示兩個權值的結構體來描述圖。 l 問題1的解決方案 1. 第一小問屬於非連通圖的遍歷問題:圖的遍歷採用乙個遞迴方式表示的圖的深度優先遍歷;由於場館才滿足如果平均車速在每小時20公里以下就表示兩點之間不可通行,那麼該圖是乙個非連通圖,為了訪問到圖中的所有結點,以圖中未被訪問到的每乙個頂點為初始點,去呼叫上面的遍歷演算法: for(int i=0;i**:
#include#include#include
using namespace std; //建立圖的儲存結構,用鄰接矩陣表示,帶兩個權值,所以用乙個結構體來表示
const int maxverterxnum=7; const int maxvalue=1000; const int maxsizelist=20;
//為儲存每次能夠參觀的場館從多到少的順序,設立乙個線性表來儲存資料 struct seqlist ; void initlist(seqlist &l) //這裡再做一張小圖來解決問題3
struct mnode ; struct mgraph ; struct graph //建立圖結構 ; void initmgraph(mgraph &mga,int v) //排序演算法 void order(seqlist &l,int n) } } }
//邊集陣列 struct edge ; //from v求最小生成樹 void prim(graph &ga,edge *mst,int v) } for(int k=1;kfor(i=k;i//m邊集陣列 struct medge ; void mprim(mgraph &mga,medge *mmst,int v) else if(i>v) } for(int k=1;kfor(i=k;i//主函式 main(int argc,char *argv) fclose(fp); /*for(int i=0;i}*/ //cout<<"a="for(i=0;i//cout<"fclose(ofp); cout<<"successful!"< 按要求,給國家進行排名。有多組資料。第一行給出國家數n,要求排名的國家數m,國家號從0到n 1。第二行開始的n行給定國家或地區的奧運金牌數,獎牌數,人口數 百萬 接下來一行給出m個國家號。排序有4種方式 金牌總數 獎牌總數 金牌人口比例 獎牌人口比例 對每個國家給出最佳排名排名方式 和 最終排名 格... 一 概念 動態規劃與分治方法相似,都是通過組合子問題的解來求解原問題。分治方法將問題劃分為互不相交的子問題,遞迴求解子問題,再將它們的解組合起來,求出原問題的解。動態規劃應用於子問題重疊情況,不同的子問題具有公共的子子問題。這種情況,分治演算法會反覆地求解公共子子問題,動態規劃演算法對每個子問題只求... 我們看下面這個迷宮 方陣 也可以是矩陣 迷宮入口是座標 2,0 位置,出口是 9,3 我們假定0代表通路,1代表不通。現在需要找到哪一條路是通路。我們的思想是借助棧,回溯法 回溯是什麼意思呢?先從起點出發,檢查它的上下左右是否是通路 即是否有為數字0處 也就是說為0通了,壓棧,將此位置元素變成2,這...資料結構實驗1 2(周)問題G 奧運排序問題
資料結構和演算法(四)動態規劃 鋼條問題
資料結構 使用棧Stack解決迷宮問題