九度 1008 最短路徑問題

2021-08-07 16:48:39 字數 1405 閱讀 1127

題目描述:

給你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演算法解決

ac**:

#include 

#define inf 1000000000

using namespace std;

const int maxn = 1010;

const int maxm = 100010;

int n, m;

int dis[maxn][maxn], cost[maxn][maxn];

int d[maxn], c[maxn];

bool vis[maxn];

void dijkstra(int start, int end, int n)

d[start] = c[start] = 0;

for(int i = 0; i < n; i++)

}d[index] = min;

vis[index] = true;

if(index == -1) break;

for(int j = 0; j < n; j++)

if(d[index] + dis[index][j] == d[j] && !vis[j] && dis[index][j] != inf)}}

printf("%d

%d\n", d[end], c[end]);

}int main()

}for(int k = 0; k < m; k++)

int start, end;

scanf("%d

%d", &start, &end);

dijkstra(start-1, end-1, n);

}fclose(stdin);

return

0;}

九度OJ 題目1008 最短路徑問題

一題目描述 給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。輸入 輸入n,m,點的編號是1 n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為d,花費為p。最後一行是兩個數...

九度OJ 題目1008 最短路徑問題

題目描述 給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。輸入 輸入n,m,點的編號是1 n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為d,花費為p。最後一行是兩個數 ...

九度OJ 1008 最短路徑問題

題目描述 給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。輸入 輸入n,m,點的編號是1 n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為d,花費為p。最後一行是兩個數 ...