1. 问题描述
在交通网络非常发达的今天,人们出差、旅游或其他出行时,对于里程和时间等问题比较感兴趣。对于这样一个人们关心的问题,可用一个图结构来表示交通网络系统,建立一个交通咨询系统。图终顶点表示城市,边表示城市之间的交通关系。设计一个交通咨询系统,能让旅客咨询从任一个城市到达另外一个城市的最短路径问题。
要求完成以下功能:
(1)以图中顶点表示某一个省(例如湖北省)各市(至少包括10个以上的城市),存放城市的编号、名称、简介等信息;以边表示路径,存放路径长度信息,建立交通网络图的存储结构。
(2)为用户提供图中任何城市有关信息的查询。
(3)为用户提供指定城市的交通查询,即查询指定城市到其他城市之间的最短距离。
(4)为用户提供任意城市的交通查询,即查询任意两个城市之间的一条最短路径。
(5)如果网络公司省内铺设电缆连通所有的城市,请推荐一个成本最低的设计方案。
2.设计要求
程序设计要求:
(1)必须使用C++语言和数据结构知识完成系统设计。
(2)图的存储采用邻接矩阵,类的方式实现。
(3)查询指定城市到其他城市之间的最短距离即单源最短路径使用Dijkstra算法;任意两个城市之间的最短路径采用Floyd算法;电缆设计方案采用Prim最小生成树算法;全部采用成员函数实现。
(4)请大家灵活设计不同的城市,不能出现完全一样的,至少10以上城市,各城市之间的距离估算即可。
代码框架:
#include <iostream>
#include <vector>
#include <string>
#include <climits>
#include <unordered_map>
const int MAX_CITIES = 15; // 城市数量上限
class TrafficNetwork {
private:
int cityCount;
std::vector<std::string> cityNames;
std::vector<std::vector<int>> adjacencyMatrix;
std::unordered_map<int, std::string> commentMap;
public:
TrafficNetwork() {
cityCount = 0;
adjacencyMatrix.resize(MAX_CITIES, std::vector<int>(MAX_CITIES, INT_MAX));
}
void addCity(std::string cityName, std::string comment) {
// 添加城市
}
void addConnection(int from, int to, int distance) {
// 添加连接
}
void displayCityInfo(int cityIndex) {
// 显示城市信息
}
void dijkstraShortestPath(int source) {
// 计算Dijkstra最短路径
}
void floydShortestPaths() {
// 计算Floyd最短路径
}
void primMinimumSpanningTree() {
// 计算Prim最小生成树
}
};
int main() {
TrafficNetwork network;
// 添加城市和连接
int choice;
int sourceCity;
do {
// 交互菜单
switch (choice) {
case 1:
// 显示城市信息
break;
case 2:
// 计算Dijkstra最短路径
break;
case 3:
// 计算Floyd最短路径
break;
case 4:
// 计算Prim最小生成树
break;
case 0:
// 退出
break;
default:
// 无效选择
}
} while (choice != 0);
return 0;
}