pat L2 001 緊急救援(djstra過)

2021-08-16 10:30:13 字數 1295 閱讀 9527

作為乙個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連線城市的快速道路。每個城市的救援隊數量和每一條連線兩個城市的快速道路長度都標在地圖上。當其他城市有緊急求助**給你的時候,你的任務是帶領你的救援隊盡快趕往事發地,同時,一路上召集盡可能多的救援隊。

輸入格式:

輸入第一行給出4個正整數n、m、s、d,其中n(2<=n<=500)是城市的個數,順便假設城市的編號為0~(n-1);m是快速道路的條數;s是出發地的城市編號;d是目的地的城市編號。第二行給出n個正整數,其中第i個數是第i個城市的救援隊的數目,數字間以空格分隔。隨後的m行中,每行給出一條快速道路的資訊,分別是:城市1、城市2、快速道路的長度,中間用空格分開,數字均為整數且不超過500。輸入保證救援可行且最優解唯一。

輸出格式:

第一行輸出不同的最短路徑的條數和能夠召集的最多的救援隊數量。第二行輸出從s到d的路徑中經過的城市編號。數字間以空格分隔,輸出首尾不能有多餘空格。

輸入樣例:

4 5 0 3

20 30 40 10

0 1 1

1 3 2

0 3 3

0 2 2

2 3 2

輸出樣例:
2 60

0 1 3

其實就是djstra演算法的加強版  要記錄路徑 可以記錄到這個城市的上乙個城市的方法求出路徑。救援隊數目可以通脫求最短路徑是一起求。

#include#include#include#include#include#define inf 0x3f3f3f3f

using namespace std;

int dis[1005];

int book[1005];

int map[600][600];

int pathnum[1005];

int peo[1005];

int sum[1005]= ;

int lastpath[1005];

int n,m,s,e;

void dijk()

else if(dis[j]==dis[k]+map[k][j])

}memset(lastpath,-1,sizeof(lastpath));

dijk();

printf("%d %d\n",pathnum[e],sum[e]);

int i=0,temp=e,p[505];//輸出最短路徑

while(temp!=s)

p[i]=s;

for(int j=i; j>0; j--)

cout<

PAT L2 001 緊急救援

時間限制 200 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 作為乙個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連線城市的快速道路。每個城市的救援隊數量和每一條連線兩個城市的快速道路長度都標在地圖上。...

PATL2 001緊急救援

思路 用dijkstra演算法 每次以最短的路徑為出發點 找下乙個點 如果路徑相同 就比較救援隊數目 關於dijkstra可以參考 include include using namespace std int n,m,s,d int map 501 501 num 501 path 501 len...

PAT L2 001 緊急救援 最短路徑變形

題目鏈結 題目意思 給出你四個整數n,m,s,d,分別表示有n個城市,城市標號從0 n 1 連線m條路。接下來給你n個數代表第幾個城市有多少救援隊,接下來的m行給出你三個數a b,l 分別代表從城市a到城市b距離l。現在要你輸出總共有幾條最短路徑且最短路徑上的最多的救援隊的數量,並且輸出擁有最多的救...