您的位置:首页 > 理论基础 > 数据结构算法

07-图6 旅游规划

2018-03-05 22:39 169 查看


思路:该题只是简单地用Dijkstra算法,算出两点之间的最短距离和最短花费,并且只需要当距离相同时才需要算最短花费。#include<iostream>
#define Maxsize 501
using namespace std;
int N, M, S, D;
int length[Maxsize][Maxsize], cost[Maxsize][Maxsize];
int dist[Maxsize], acost[Maxsize];//用于记录当前距离和当前的花费
void init() {
for (int i = 0; i < N; i++) {
dist[i] = Maxsize;
acost[i] = Maxsize;
for (int j = 0; j < N; j++) {
length[i][j] = Maxsize;
cost[i][j] = Maxsize;
}
}
}
int main()
{
int start, end;
cin >> N >> M >> S >> D;
init();
for (int i = 0; i < M; i++) {
cin >> start >> end;
cin >> length[start][end] >> cost[start][end];
length[end][start] = length[start][end];
cost[end][start] = cost[start][end];
}
dist[S] = acost[S] = 0;//初始化
//Dijkstra算法开始
for (int k= 0; k < 2; k++) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (dist[i] != Maxsize) {
if (dist[i] + length[i][j] < dist[j]) {
dist[j] = dist[i] + length[i][j];
}
else if(dist[i] + length[i][j] == dist[j]&&acost[i]!=Maxsize&&acost[i]+cost[i][j]<acost[j]){
acost[j] = acost[i] + cost[i][j];
}
}
}
}
}
cout << dist[D] << " " << acost[D];
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 PTA