九度OJ 1008 最短路徑問題
- 題目描述:
- 給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。
- 輸入:
-
輸入n,m,點的編號是1~n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為d,花費為p。最後一行是兩個數 s,t;起點s,終點t。n和m為0時輸入結束。
(1<n<=1000, 0<m<100000, s != t)
- 輸出:
- 輸出 一行有兩個數, 最短距離及其花費。
- 樣例輸入:
-
3 2 1 2 5 6 2 3 4 5 1 3 0 0
- 樣例輸出:
-
9 11
這些用Dijkstra解決的圖論問題還是很常見的。這道題在常規題的基礎上加上了每條路的花費。但在本質上絲毫不影響最短路的演算法思想。#include <iostream> #include <cstring> #define MAX 1<<29 using namespace std; int map[1010][1010]; int cost[1010][1010]; bool visit[1010]; int dis[1010]; //表示從起點到各點的距離 int s[1010]; //表示從起點到各點的花費 int n,m; void dijkstra(int start,int end){ memset(visit,0,sizeof(visit)); int k; for(int i=1;i<=n;i++){ dis[i] = map[start][i]; } for(int i=1;i<=n;i++){ s[i] = cost[start][i]; } for(int i=1;i<=n;i++){ int temp = MAX; k = 0; for(int j=1;j<=n;j++){ if(!visit[j] && dis[j] < temp){ temp = dis[j]; k = j; } } visit[k] = 1; for(int j=1;j<=n;j++){ if(!visit[j] && dis[j] > (dis[k]+map[k][j])){ dis[j] = dis[k]+map[k][j]; s[j] = s[k] + cost[k][j]; } else if(!visit[j] && dis[j] == (dis[k]+map[k][j])){ if(s[j] > s[k]+cost[k][j]) s[j] = s[k]+cost[k][j]; } } } cout<<dis[end]<<" "<<s[end]<<endl; } int main(){ while(cin>>n>>m){ if(n == 0) break; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++) map[i][j] = cost[i][j] = MAX; } int a,b,d,p; for(int i=0;i<m;i++){ cin>>a>>b>>d>>p; map[a][b] = map[b][a] = d; cost[a][b] = cost[b][a] = p; } int start,end; cin>>start>>end; dijkstra(start,end); } return 0; }
相關推薦
九度OJ 1008 最短路徑問題
題目描述: 給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。 輸入: 輸入n,m,點的編號是1~n,
九度OJ-題目1008 最短路徑問題
題目描述: 給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。 輸入: 輸入n,m,點的編號是1~n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有
九度OJ 1008:最短路徑問題 (最短路)
時間限制:1 秒 記憶體限制:32 兆 特殊判題:否 提交:8064 解決:2685 題目描述: 給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。 輸入
九度-1008 最短路徑
題目描述: 給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。 輸入: 輸入n,m,點的編號是1~n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為
OJ:最短路徑演算法,Dijk
先構造有向圖,再用Dijk演算法。實現時注意 set 中點的距離的更新。 #include <stdio.h> #include <string.h> #include <algorithm> #include <set>
六度分離(最短路徑之Floyd演算法)
六度分離點我找原題Time Limit : 5000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)Total Submission(s) : 31 Accepted Submission(s) : 14Font: Times
九度OJ 1533 最長上升子序列 (基於貪心和二分查詢)
題目描述: 給定一個整型陣列, 求這個陣列的最長嚴格遞增子序列的長度。 譬如序列1 2 2 4 3 的最長嚴格遞增子序列為1,2,4或1,2,3.他們的長度為3。 輸入: 輸入可能包含多個測試
九度 oj 題目1008:最短路徑問題
這道題告訴我們 INT_MAX, 慎用,dijkstra 有時加溢位了,你都不知道 #include <cstdio> //#include <climits> #include <algorithm> using namespace
九度 OJ 題目1008:最短路徑問題 (Dijstra 演算法)
題目描述: 給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。 輸入: 輸入n,m,點的編號是1~n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為
九度題目1008:最短路徑問題
題目描述: 給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。 輸入: 輸入n,m,點的編號是1~n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為
九度:題目1008:最短路徑問題
題目描述: 給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。 輸入: 輸入n,m,點的編號是1~n
九度 題目1008:最短路徑問題
最短路徑問題,首先想到了貪心演算法實現的dijkstra演算法;這道題我用了連結串列的儲存方式,其實用鄰接矩陣也可以,主要為了練手,並且連結串列比矩陣要節約空間; 題目描述: 給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終
九度OJ-1112-導彈攔截-最長不增子序列
研究生 -h 計算 不能 problems ear 來源 分隔 std 題目1112:攔截導彈 時間限制:1 秒 內存限制:32 兆 特殊判題:否 提交:5218 解決:2603 題目描述: 某國為了防禦敵國的導彈襲擊,開發出一種導彈攔截系統。但是這種導彈攔截系統有一
六度分離 (無向圖最短路徑問題)
1967年,美國著名的社會學家斯坦利·米爾格蘭姆提出了一個名為“小世界現象(small world phenomenon)”的著名假說,大意是說,任何2個素不相識的人中間最多隻隔著6個人,即只用6個人就可以將他們聯絡在一起,因此他的理論也被稱為“六度分離”理論(six degrees of sepa
OJ 1006:街區最短路徑問題
OJ 1006:街區最短路徑問題 因為只能東西,南北走,所以求一點到另一點的距離就等於橫縱座標的差的絕對值之和,我們將每個點的橫座標取出來,縱座標取出來,這個問題就成了這些數到哪個數的距離的和最小,分別求出橫座標和縱座標對應的哪個和,然後求和就行了 n=int(input()) wh
SDUT OJ 2143 圖結構練習——最短路徑
圖結構練習——最短路徑 Time Limit: 1000MS Memory limit: 65536K 題目描述 給定一個帶權無向圖,求節點1到節點n的最短路徑。 輸入
最短路徑演算法複雜度總結
Dijkstra:O(n2)適用於權值為非負的圖的單源最短路徑,用斐波那契堆的複雜度O(E+VlgV), BellmanFord:適用於權值有負值的圖的單源最短路徑,並且能夠檢測負圈,複雜度O(VE)
最短路徑 oj
“師創杯”山東理工大學第五屆ACM程式設計競賽#include <stdio.h> #define MAX 223372036854775807 long long map[100][100],d[100][10]; //map存圖,d存每個點不同情況的狀態 int vi[100][
hdu oj 2544 最短路(最短路徑)
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 31874 Accepted Submissio
(最短路徑算法整理)dijkstra、floyd、bellman-ford、spfa算法模板的整理與介紹
void empty borde fast 默認 grand else 理解 scan 這一篇博客以一些OJ上的題目為載體。整理一下最短路徑算法。會陸續的更新。。。 一、多源最短路算法——floyd算法 floyd算法主要用於求隨意兩點間的最短路徑。也成