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

2021-08-15 04:19:23 字數 1256 閱讀 9377

題目鏈結

題目意思

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

解題思路

這是一道用dijstra 演算法求最短路的題目。不過題目不但要求最短路徑,並且要輸出最短路徑的條數和最短路徑。那麼我們就用path陣列來記錄路徑,path【u】表示u的前驅節點。

**部分

#include 

#include

#include

#include

#include

using namespace std;

const int maxn=510;

const int inf=0x3f3f3f3f;

int n,m,s,d;

int maps[maxn][maxn];//

/儲存兩點間的距離

int dis[maxn],path[maxn],pathnum[maxn],val[maxn],totalval[maxn],re[maxn];/

//totalval陣列記錄救援隊最多的數量,re陣列記錄救援隊最多的路徑

int vis[maxn];//

/標記陣列

void dijstra(int u,int v)

}for(int i=0; i1; i++)

}vis[pos]=1;

for(int j=0; jif(!vis[j])

else

if(maps[pos][j]+dis[pos]==dis[j])}}

}}

}int main()

dijstra(s,d);

int num=0,cur=d;

while(cur!=s)

re[num++]=s;

printf("%d

%d\n",pathnum[d],totalval[d]);

for(int i=num-1; i>0; i--)

printf("%d ",re[i]);

printf("%d\n",re[0]);

return

0;}

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 緊急救援(djstra過)

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