給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。
輸入n,m,點的編號是1~n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為d,花費為p。最後一行是兩個數 s,t;起點s,終點。n和m為0時輸入結束。
(1輸出 一行有兩個數, 最短距離及其花費。
3 2
1 2 5 6
2 3 4 5
1 30 0
9 11
還是最經典的dijkstra演算法,記錄距離的同時記錄一下花費就行。最後按距離優先輸出
#include#include#includeusing namespace std;
#define inf 0x3f3f3f3f
#define n 1050
int map1[n][n];//記錄距離
int map2[n][n]; //記錄路的花銷
int dist[n],cost[n];//最短路徑集,花銷集
int s1[n];
int n,s,t;//點個數,起始點,終點
void dijstra()
}s1[u]=1;
for(j=0; jlon)
else if(map1[x][y]==lon)}}
scanf("%d%d",&s,&t);
s--;
t--;
dijstra();
printf("%d %d\n",dist[t],cost[t]);
}return 0;
}
HDU3790(最短路徑)
題意 給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。解題思路 這是最短路問題的變形,以前做的只是求兩點之間的最短距離,現在除了距離最短,在此基礎上增加了花費最少。用弗洛伊德演算法同樣可以求解。注意 ...
hdu3790 最短路徑問題
wa了無數次,終於過了,還是dijkstra,只不過在距離,相同時,多判斷一下時間。注意重邊!include include include define m 0x7fffffff using namespace std struct p 2000 struct c 1020 1020 int vi...
HDU 3790 最短路徑問題
hdu 3790 最短路徑問題 單源最短路勁,更新路勁時要更新花費 include include include includeusing namespace std define inf 0x7fffffff int n,m int map 1005 1005 int cost 1005 100...