|

楼主 |
发表于 2023-12-24 22:01:47
|
显示全部楼层
[code]#include <iostream>
#include <vector>
#include <queue>
#include <limits>
class CityNode {
public:
std::string name;
int economy;
int logistics;
CityNode(std::string _name, int _economy, int _logistics)
: name(_name), economy(_economy), logistics(_logistics) {}
};
class MapGraph {
public:
std::vector<CityNode> nodes;
std::vector<std::vector<std::pair<int, int>>> edges; // 使用邻接表表示边的关系
void addCityNode(CityNode city) {
nodes.push_back(city);
edges.emplace_back();
}
void addRoad(int from, int to, int distance) {
edges[from].emplace_back(to, distance);
edges[to].emplace_back(from, distance);
}
int findShortestPath(int start, int end) {
std::vector<int> distance(nodes.size(), std::numeric_limits<int>::max());
distance[start] = 0;
std::priority_queue<std::pair<int, int>, std::vector<std::pair<int, int>>, std::greater<>> pq;
pq.push({0, start});
while (!pq.empty()) {
int u = pq.top().second;
int dist = pq.top().first;
pq.pop();
if (dist > distance[u]) {
continue;
}
for (auto [v, w] : edges[u]) {
if (distance[v] > distance[u] + w) {
distance[v] = distance[u] + w;
pq.push({distance[v], v});
}
}
}
return distance[end];
}
};
int main() {
MapGraph map;
map.addCityNode(CityNode("北京", 100, 50));
map.addCityNode(CityNode("上海", 200, 60));
map.addCityNode(CityNode("深圳", 150, 70));
map.addRoad(0, 1, 1000);
map.addRoad(0, 2, 2000);
map.addRoad(1, 2, 1500);
int shortestDistance = map.findShortestPath(0, 2);
std::cout << "北京到深圳的最短距离为:" << shortestDistance << "公里" << std::endl;
return 0;
}
@FishC对其进行功能上的完善与优化 |
|