題目描述:
給你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。最後一行是兩個數 ...