设计一个简单的旅游交通线路查询系统,当输入多个地点和地点间的距离和路费后,计算出最短的路线规划和总费用并输出结果,要求算法的时间复杂度较低,并列出详细的c++代码
时间: 2024-03-21 16:39:47 浏览: 54
C++ 旅行查询系统
这是一个经典的最短路径问题,可以使用Dijkstra算法来解决。以下是完整的C++代码:
```cpp
#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
const int maxn = 1005; // 最大点数
const int INF = 0x3f3f3f3f; // 无穷大
struct edge {
int to, cost;
edge(int to, int cost) : to(to), cost(cost) {}
};
vector<edge> G[maxn]; // 邻接表存图
int d[maxn]; // 最短距离
void dijkstra(int s) {
memset(d, INF, sizeof(d));
d[s] = 0;
priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > que;
que.push(make_pair(0, s));
while (!que.empty()) {
pair<int, int> p = que.top();
que.pop();
int v = p.second;
if (d[v] < p.first) continue;
for (int i = 0; i < G[v].size(); i++) {
edge e = G[v][i];
if (d[e.to] > d[v] + e.cost) {
d[e.to] = d[v] + e.cost;
que.push(make_pair(d[e.to], e.to));
}
}
}
}
int main() {
int n, m;
cout << "请输入点数和边数:" << endl;
cin >> n >> m;
cout << "请输入各边的起点、终点和距离:" << endl;
for (int i = 0; i < m; i++) {
int u, v, w;
cin >> u >> v >> w;
G[u].push_back(edge(v, w));
G[v].push_back(edge(u, w)); // 无向图
}
int s, t;
cout << "请输入起点和终点:" << endl;
cin >> s >> t;
dijkstra(s);
cout << "最短距离为:" << d[t] << endl;
return 0;
}
```
输入格式为:
```
点数 边数
起点 终点 距离
起点 终点 距离
...
起点 终点 距离
起点 终点
```
例如:
```
4 5
1 2 2
1 3 1
2 3 3
2 4 4
3 4 1
1 4
```
输出结果为:
```
最短距离为:3
```
阅读全文