題解 城市交通 附資料

2022-03-06 22:23:36 字數 1366 閱讀 6019

另一道水題

某城市 有n(1<=n<=50)個街區,某些街區由公共汽車線路相連,如在圖1中,街區1,2有一條公共汽車線路相連,且由街區1至街區2的時間為34分鐘。由於街區與街區之間的距離較近,與等車時間相比可忽略不記,所以這個時間為兩趟公共汽車的間隔時間,即平均的等車時間。由街區1至街區5的最快走法為1-3-5,總時間為44分鐘。現在市**為了提高城市交通質量,決定加開m(1<=m<=10)條公共汽車線路。若在某兩個街區a,b之間加開線路(前提是a、b之間必須已有線路),則從a到b的旅行時間縮小為原來的一半(距離未變,只是等車的時間縮短了一半)。例如,若在1,2之間加開一條線路,則時間變為17分鐘,加開兩條線路,時間變為8.5分鐘,以此類推。所有的線路都是環路,即如果由1至2的時間變為17分鐘,則由2至1的時間也變為17分鐘。

求加開某些線路,能使由城市1至城市n的時間最少。例如,在圖1中,如果m=2,則改變1-3,3-5的線路,總的時間可以減少為22分鐘。

圖一:

input:

5 20 34 24 0 0

34 0 10 12 0

24 10 0 16 20

0 12 16 0 30

0 0 20 30 0

output:

22.00

1 33 5

dijkstra+dp

#includeusing namespace std;

int n,m;

double dist[51][11];

struct edge

;struct node

while(!q.empty())

if(dist[a[now][i].to][t.n+a[now][i].n]>dist[now][t.n]+a[now][i].dis)

node tmp;

tmp.dis=dist[a[now][i].to][t.n+a[now][i].n];

tmp.pos=a[now][i].to;

tmp.n=t.n+a[now][i].n;

for(int j=1;j<=m;j++)

if(tmp.pos==n&&tmp.n==m)

}q.push(tmp);

}} }

}int main()

); }

}}

} for(int i=0;i<=50;i++) }

dijkstra(1);

printf("%.2lf\n",dist[n][m]);

for(int i=1;i<=m;i++)

{ cout資料

SSL 城市交通

有n個城市,編號1 n,有些城市之間有路相連,有些則沒有,有路則當然有乙個距離。現在規定只能從編號小的城市到編號大的城市,問你從編號為1的城市到編號為n的城市之間的最短距離是多少?先輸入乙個n,表示城市數,n小於100。下面的n行是乙個n n的鄰接矩陣map i,j 其中map i,j 0表示城市i...

深搜 城市交通

由於牛奶市場的需求,奶牛必須前往城市,但是唯一可用的交通工具是計程車 教會奶牛如何在城市裡打的 給出乙個城市地圖,東西街區e 1 e 40 南北街區n 1 n 30 製作乙個開車指南給計程車司機,告訴他如何從起點 用s表示 到終點 用e表示 每乙個條目用空格分成兩部分,第乙個部分是方向 n,e,s,...

城市交通費

城市交通費 問題描述 有 n 個城市,編號 1 n。其中 i 號城市的繁華度為 pi。省內有 m 條可以雙向同行的高速 公路,編號 1 m。編號為 j 的高速公路連線編號為 aj 和 bj 兩個城市,經過高速公路的費用 是 wj。若從城市 x 出發到某城市 y,除了需要繳納高速公路費用,還要繳納 城...