数据结构课程设计之 交通咨询系统设计(c++)

题目

设计目的:

熟练掌握迪杰斯特拉算法和费洛伊德算法,能够利用它们解决最短路径问题。
掌握图的深度,广度遍历算法。
掌握快速排序算法。

内容:

设计一个交通咨询系统,通过读取全国城市距离图(https://pan.baidu.com/s/1MOl4Lf_SgSnYWHFm29z70w中有三个csv文件用来读取,提取码是5n1o,如想按照我的程序运行必须将这三个文件放在和cpp和.h同一个文件夹内,如修改程序请将读取文件内容函数进行修改—1.csv是邻接矩阵(只有0和1),2.csv是下三角城市间距离,3.csv是城市名字)**,实现:
1、请验证全国其他省会城市(不包括港澳和两个宝岛台北和海口)到武汉中间不超过 2 个省(省会城市)是否成立?(正是因为武汉处于全国的中心位置,此次疫情才传播的如此广);

2、允许用户查询从任一个城市到另一个城市之间的最短路径(两种算法均要实现,界面上可自行选择)以及所有不重复的可行路径(可限制最多经过 5 个节点),并利用快速排序对所有路径方案依据总长度进行排序输出(输出到文件),每一条结果均需包含路径信息及总长度,试比较排序后的结果与迪杰斯特拉算法和费洛伊德算法输出的结果;

3、假设在求解 2 个城市间最短路径时需要绕过某个特定的城市(用户输入或者选择,例如武汉),请问应该如何实现?

4、不基于功能 2 遍历的结果如何直接求解两个城市间的前第 K 短的路径,例如,武汉到北京之间第 3 短的路径。

graph.h

//这是里头文件graph.h
#pragma once
#include<iostream>
#include<fstream>
#include<sstream>
#include<string>
#include<queue>
#include<stack>
using namespace std;
const int MAX = 10000;
void quickSort(int left, int right, int a[], string s[], int size);


class Gragh
{
   
private:
	const char* a[34];
	int edge[34][34];
	int n, e, path_num;
	bool Mark[34];
	int Path[50][11];
	int Path_date[50];
	int result[34];
public:
	Gragh();												//初始化各变量
	void creat_Gragh();										//构建图及其临接矩阵
	int find(string str);									//将城市名称转化为编号
	void BFT(Gragh g);										//通过BFT来验证武汉处于全国中心位置
	void Dijkstra(string str1, string str2, string str3 = "无");		//Dijkstra算法,第三个参数缺省来实现要求二三
	void Floyd(string str1, string str2, string str3 = "无");			//Floyd算法
	void All_Load(string str1, string str2);						//
	void Find_All_Load(int pos1, int pos2);							//查找算法
	void A_star(string str1, string str2, int k);			//A*算法来实现第k短问题
};

struct edge1												//用于A*算法中将开销与编号封装
{
   
	int num;
	int cost, last_cost;							//cost记录的是当前路径的总花销,last_cost记录的是此节点的父节点到起点的花销
									//A*算法中,花销包含两部分,第一部分是起点到中间节点的距离(last_cost+edge[][]),第二部分是迪杰斯塔拉结果(dist[])
	string str;
	bool operator <(const edge1& s)const		//用于优先队列,顺序是从小到大
	{
   
		return cost > s.cost;
	}
};



Gragh::Gragh()						//构造函数用来初始化
{
   
	for (int i = 0; i < 50; i++)
	{
   
		Path_date[i] = 0;
		for (int j = 0; j < 11; j++)
			Path[i][j] = -1;
	}

	for (int i = 0; i < 34; i++)
	{
   
		Mark[i] = false;
		result[i] = 0;
		for (int j = 0; j < 34; j++)
		{
   
			if (i == j) edge[i][j] = 0;
			else edge[i][j] = MAX;
		}
	}
	n = 0;
	path_num = 0;
}


void Gragh::creat_Gragh()				//读取3个文件来构造图
{
   
	int temp[600] = {
    0 };
	string str;
	{
   
		ifstream fin_2("2.csv");
		for (int tem = 0; fin_2.eof() == false; tem++)
		{
   
			getline(fin_2, str, ',');
			if (str == "0")
			{
   
				getline(fin_2, str, '\n');
				getline(fin_2, str, ',');
				cin.sync();
			}
			istringstream is(str);
			is >> temp[tem];
		}
	}
	ifstream fin_3("3.csv");
	for (int i = 0; i < 34; i++)
	{
   

		getline(fin_3, str, ',');
		string* str_1 = new string(str);
		a[i] = str_1->c_str();
	}
	ifstream fin_1("1.csv");
	for (int i = 0; i < 34; i++)
	{
   
		for (int j = 0; j < 34; j++)
		{
   
			if (j == 33)
			{
   
				getline(fin_1, str, '\n');
				if (str != "1" || j 
  • 34
    点赞
  • 251
    收藏
    觉得还不错? 一键收藏
  • 30
    评论
设计、实现一个全国大城市间的交通咨询程序,为旅客提供三种最优决策方案:一是建立交通网络图的存储结构,二实现两个城市间的最短路经问题。程序所具有的功能特色本程序主要目的是为了给用户提供路径咨询。实现了帮助用户了解全国各大城市间往来的最短路径问题,第二,可以提供用户查询各大城市的相关信息。本程序最大的特点是支持用户自己添加城市信息及城市,或添加城市的路径,既就有可扩展性 该程序所做的工作的是模拟全国交通咨询,为旅客提供三种最优决策的交通咨询。此程序规定: (1) 在程序中输入城市名称时,需输入10个字母以内的字母串;输入列车或飞机编号时需输入一个整型数据;输入列车或飞机的费用时需输入一个实型数据;输入列车或飞机开始时间和到达时间时均需输入两个整型数据(以hh:mm的形式);在选择功能时,应输入与所选功能对应的一个整型数据。 (2) 程序的输出信息主要是:最快需要多少时间才能到达,或最少需要多少旅费才能到达,或最少需要多少次中转到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。 (3) 程序的功能包括:提供对城市信息的编辑,提供列车时刻表和飞机航班表的编辑,提供三种最优决策:最快到达、最省钱到达、最少中转次数到达。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值