一、 实验目的

1.目的:掌握图的存储、构建、搜索等操作和应用,能用最短路径及其搜索等算法编制较综合性的程序,求解最优路线问题,进行程序设计、数据结构和算法设计等方面的综合训练。
2.任务:设计一个城市交通咨询模拟系统,利用该系统实现至少两种最优决策:最短路程到达、最省时到达等线路规划。

二、 实验内容及要求

1、 任务描述
实验内容:
用户驾车出行由于出行目的的不同对道路路线选择的要求也有不同。例如,有的希望在途中的路程尽可能短,有的则可能希望路程中时间最短。为了能满足广大旅客的需求,编制一个城市交通咨询模拟系统,选取城市部分位置、道路抽象为程序所需要图的顶点和边,并以城市道路长度(路程),道路的某时段的速度等信息作为图结点中的弧信息,为旅客提供这两种最优决策的交通咨询。
输入和输出:
输入形式:
构建图时,输入顶点、弧涉及的信息,包括:起始地、目的地、长度、该弧此时间段的平均速度等信息;
用户或者客户要输入出发地和目的地,并选择何种最优决策的路线规划。
输出形式:根据用户需求输出对应信息
输出最短路程所需要的路线信息和最短路程;
输出最短时间所需要的路线信息和最短时间。
实验要求:
实现一个简单的交互式界面,包括系统菜单、清晰的输入提示等。
根据输入的交通图数据,以图形化形式把交通图显示在屏幕上。
以图形化形式把最优路线显示在屏幕上。
能够上机编辑、调试出完整的程序。

2、 主要数据类型与变量

const int inf=999999;
double mp[20][20];
int path[20][20];
int n,m;

3、 算法或程序模块

for(int i=0;i<m;i++){cin>>Start>>End>>dis;
mp[Start][End]=dis;
}
for(int k=0;k<n;k++)//第k个点进行松弛
for(int i=0;i<n;i++)for(int j=0;j<n;j++)if(mp[i][j]>mp[i][k]+mp[k][j])//如果能够缩短就更新距离 {mp[i][j]=mp[i][k]+mp[k][j];path[i][j]=k;//记录能松弛的点 }

三、 测试

1、 方案
假定根据城市道路抽象为如下图,起始地为V1顶点,目的地为V9顶点,对用弧上的距离和此时间段平均速度等信息如下表所示:


2、 结果


四、程序的源代码

#include<bits/stdc++.h>
using namespace std;
const int inf=999999;
double mp[20][20];
int path[20][20];
int n,m;
void print(int a,int b){if(path[a][b]==-1) return;//因为开始初始化为-1,这里就可以避免相邻的再次输出 print(a,path[a][b]);//前半部 cout<<path[a][b]<<"-->";//输出该点 print(path[a][b],b);//后半部
}int main(){// freopen("in.txt","r",stdin);while(1){printf("请选择1或2:\n"); printf("1.最短路程到达路线规划:\n");printf("2.最短时间到达路线规划:\n");int k;cin>>k;printf("选择完成:\n"); system("pause");if(k==1){system("cls");printf("请输入结点个数:\n");cin>>n;printf("请输入弧的个数:\n");cin>>m;memset(path,-1,sizeof(path));//初始化-1 for(int i=0;i<n;i++)for(int j=0;j<n;j++) if(i==j) mp[i][j]=0;else mp[i][j]=inf;int Start,End,dis;printf("请输入结点之间路径信息:\n");for(int i=0;i<m;i++){cin>>Start>>End>>dis;mp[Start][End]=dis;}for(int k=0;k<n;k++)//第k个点进行松弛for(int i=0;i<n;i++)for(int j=0;j<n;j++)if(mp[i][j]>mp[i][k]+mp[k][j])//如果能够缩短就更新距离 {mp[i][j]=mp[i][k]+mp[k][j];path[i][j]=k;//记录能松弛的点 }//system("pause");printf("请输入起点和终点:\n");int aa,bb;cin>>aa>>bb;cout<<"The shortest path between vertices\n";if(mp[aa][bb]==inf){//两者不通 cout<<aa<<' '<<bb;cout<<" These two points cannot be reached\n\n"; }else{cout<<aa<<" to "<<bb<<" shortest path is "<<mp[aa][bb]<<" km"<<endl;cout<<"The specific path is\n";cout<<aa<<"-->";print(aa,bb);cout<<bb<<' ';cout<<endl<<endl;}printf("运行完成!\n");system("pause");system("cls");}else if(k==2){system("cls");printf("请输入结点个数:\n");cin>>n;printf("请输入弧的个数:\n");cin>>m;memset(path,-1,sizeof(path));//初始化-1 for(int i=0;i<n;i++)for(int j=0;j<n;j++) if(i==j) mp[i][j]=0;else mp[i][j]=inf;int Start,End;double dis,v;printf("请输入结点之间路径信息:\n");for(int i=0;i<m;i++){cin>>Start>>End>>dis>>v;mp[Start][End]=dis/v;}for(int k=0;k<n;k++)//第k个点进行松弛for(int i=0;i<n;i++)for(int j=0;j<n;j++)if(mp[i][j]>mp[i][k]+mp[k][j])//如果能够缩短就更新距离 {mp[i][j]=mp[i][k]+mp[k][j];path[i][j]=k;//记录能松弛的点 }//system("pause");printf("请输入起点和终点:\n");int aa,bb;cin>>aa>>bb;cout<<"The shortest path between vertices\n";if(mp[aa][bb]==inf){//两者不通 cout<<aa<<' '<<bb;cout<<" These two points cannot be reached\n\n"; }else{cout<<aa<<" to "<<bb<<" shortest time is "<<mp[aa][bb]<<" hours"<<endl;cout<<"The specific path is\n";cout<<aa<<"-->";print(aa,bb);cout<<bb<<' ';cout<<endl<<endl;}printf("运行完成!\n");system("pause");system("cls");}else{printf("wrong choose!\n");}}      return 0;
}

数据结构实验:城市交通咨询模拟系统相关推荐

  1. 城市交通咨询模拟系统,利用该系统实现至少两种最优决策:最短路程到达、最省时到达等线路规划。

    1.任务:设计一个城市交通咨询模拟系统,利用该系统实现至少两种最优决策:最短路程到达.最省时到达等线路规划. 2.内容: 用户驾车出行由于出行目的的不同对道路路线选择的要求也有不同.例如,有的希望在途 ...

  2. 数据结构实验-停车场模拟系统

    说明: 在大二小学期,老师布置了一个数据结构实验,小组成员花了大概一周完成了实验,如果代码有bug,望指出,谢谢. 问题描述: 模拟一个停车场系统.停车场根据停车的占地面积进行收费.我们假设一个停车场 ...

  3. 数据结构实验---最短路径C实现附带及简单界面

    数据结构实验-最短路径C实现附带及简单界面 前言: 最短路径算法是图论中比较重要的算法之一,我们在课本中学到的最短路径算法有两种,分别为Dijkstra 算法 和 Floyd 算法,本文中采用的是 D ...

  4. 数据结构--简易图书管理模拟系统

    数据结构–简易图书管理模拟系统 [实验目的] 插入.查找和删除等数据操作在实际应用中非常普遍,通过设计和实现一个简易的图书管理系统,进一步提高学生对插入.查找和删除等操作的理解和应用能力.帮助学生理解 ...

  5. 全国交通咨询模拟系统

    数据结构 严蔚敏 第六章 图6.6.2 简易版 具体实现修改vexs顶点表,a,b,c改为地点名 仅使用Dijkstra算法 如果是为了最少转站,对图使用广度优先即可 还有读入地图使用file之类的细 ...

  6. C语言课程设计 全国交通咨询模拟,全国交通咨询模拟系统C++实现(课程设计报告).doc...

    全国交通咨询模拟系统C实现(课程设计报告) 全国交通咨询模拟 一.设计目的 掌握线性表.栈.图结构和对文件的操作,学习屏幕编辑和菜单技术,掌握用最短路径及其搜索算法编制较综合性的程序,能用图的邻接存储 ...

  7. 全国交通咨询模拟java_全国交通咨询模拟系统java 编写(课程设计报告).doc

    全国交通咨询模拟系统java 编写(课程设计报告) 全国交通咨询模拟 一.实习目的 通过实习,了解并初步掌握设计.实现较大系统的完整过程,包括系统分析.编码设计.系统集成.以及调试分析,熟练掌握数据结 ...

  8. 数据结构实验之链表五:单链表的拆分-sdut

    数据结构实验之链表五:单链表的拆分 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 输入N个 ...

  9. SDUT OJ 数据结构实验之排序一:一趟快排

    数据结构实验之排序一:一趟快排 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descrip ...

最新文章

  1. AI时代,为何机器人公司无法盈利只能走向倒闭?
  2. PostgreSQL_case when
  3. 【LeetCode-面试算法经典-Java实现】【015-3 Sum(三个数的和)】
  4. 【.NET Core 跨平台 GUI 开发】第一篇:编写你的第一个 Gtk# 应用
  5. svm机器学习算法_SVM机器学习算法介绍
  6. 输出斐波那契数列的第n项
  7. java break(),Java BreakIterator last()用法及代码示例
  8. 华量杯-股票预测, keras+LSTM
  9. OpenSSL历史版本整理
  10. char转化为cstring_C语言100题集合001-将一个数字字符串转换为一个整数
  11. android学习日记——高级组件3(PopupWindow,Notifcation,Style,Theme,自定义组件)
  12. 台电TBOOK16PRO安装凤凰安卓系统
  13. c语音异或运算符_一文看懂C语言异或运算
  14. 自定义Drawable实现灵动的红鲤鱼动画(下篇)
  15. 不背字根学五笔视频教程
  16. [C语言]求某年某月的天数(两个方法)
  17. 800000000000
  18. 教程:怎样处理资源管理器崩溃退出的问题
  19. ActiveX 控件打包
  20. 【Kivy】图形绘制(七)

热门文章

  1. 关于物联网远程控制技术,你了解的有多少?
  2. 怎么在pdf上编辑文字内容
  3. 创意CSS写字本选择器
  4. CollectionView的HeaderView头视图悬停
  5. python将图片表情包转化成字符
  6. JavaGUI:多功能计算器(四)--Swing实现双语悬停提示(源码升级说明)
  7. 给你三个必须要学C语言的理由!
  8. Cesium 开启场景FPS显示
  9. 利用阿里云短信找回密码 SpringBoot集成Mybatis
  10. 专业编写c语言的软件,适合编写C语言代码的几款软件