總體上,用個dijkstra演算法
稍加修改就行
經測試,救援經過的城市不會超過50;
相同長度的路徑數不會超10;
如果結構直接設個500的陣列會佔太多記憶體而崩掉
#include
#include
#include
#define inf 65535
struct zlh
;int jc[
500]
[500]=
;int
main()
;for
(int i=
0;i<=
499;i++
) yu[i]
.g=1
;int a,b,m1,n1,y=
0,ui[
1000]=
;scanf
("%d%d%d%d"
,&a,
&b,&m1,
&n1)
;for
(int i=
0;i)scanf
("%d"
,&ui[i]);
ui[999]
=ui[0]
; ui[0]
=ui[m1]
; ui[m1]
=ui[
999]
;for
(int i=
1;i<=b;i++
)for
(int i=
1;i)for
(int t=
1;t) jc[i]
[t]=
!jc[i]
[t]||i==t?inf:jc[i]
[t];
for(
int i=
1;i)while
(++y}for
(int i=
1;ielse
if(yu[i]
.u==jc[k]
[i]+min)}}
yu[k]
.vis=1;
}if(!n1) n1=m1;
printf
("%d"
,yu[n1]
.g);
int se=
0,sr=0;
for(
int i=
1;i<=yu[n1]
.g;i++)
gh+=ui[n1];if
(gh>se)
}printf
(" %d\n"
,se)
;for
(int i=
0;i<=yu[n1]
.p[sr]
;i++
)printf
("%d\n"
,n1==m1?
0:n1)
;}
L2 001 緊急救援
這道題就是一道最短路 dijkstra演算法 將模板稍作修改就行了,就是再另外加乙個記錄路線條數的陣列 即當路的長度與下乙個需要判斷的 節點的長度相等時路線就相加 和乙個記錄每個節點在最短路基礎上的車的總數量的陣列,然後就ok了,如下 include include include define m...
L2 001 緊急救援
作為乙個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連線城市的快速道路。每個城市的救援隊數量和每一條連線兩個城市的快速道路長度都標在地圖上。當其他城市有緊急求助 給你的時候,你的任務是帶領你的救援隊盡快趕往事發地,同時,一路上召集盡可能多的救援隊。輸入格式 ...
L2 001 緊急救援
l2 001.緊急救援 作為乙個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連線城市的快速道路。每個城市的救援隊數量和每一條連線兩個城市的快速道路長度都標在地圖上。當其他城市有緊急求助 給你的時候,你的任務是帶領你的救援隊盡快趕往事發地,同時,一路上召集盡可...