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

一、 实验目的

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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

传感器信号处理仿真实验(c语言实现),均值滤波,滑动滤波

文章目录总结test1、动态显示一段正弦波信号的曲线&#xff1a;test2、现提供随机信号函数&#xff0c;随意设定两路不同幅度的随机信号&#xff0c;动态显示出来。test3、用均值法将原始的传感器信号进行滤波处理test4、用滑动滤波法将原始的传感器信号进行滤波处理总结 1.为…

python和php合成,Python照片合成的方法详解

【相关学习推荐&#xff1a;python教程】文章目录前言Github效果实现过程整体代码前言看电影的时候发现一个照片墙的功能&#xff0c;觉得这样生成照片挺好玩的&#xff0c;于是就动手用Python做了一下&#xff0c;觉得用来作照片纪念的效果可能会不错。P:后面了解到我想做的功…

linux系统运行pbs出现ntf,Linux系统启动故障修复

Linux在启动过程中会出现一些故障&#xff0c;导致系统无法正常启动&#xff0c;本文列举了几个应用单用户模式、GRUB命令操作、Linux救援模式的典型故障修复案例。一、单用户模式Linux提供了单用户模式(类似Windows安全模式)&#xff0c;可以在最小环境中进行系统维护。在单用…

在安卓手机上下载linux系统,如何在安卓手机上运行Ubuntu系统

Ubuntu是一款linux系统&#xff0c;一般我们都是将其运行在电脑中&#xff0c;可不可以在手机端也能运行Ubuntu呢&#xff1f;也是可以的&#xff0c;想知道如何实现的&#xff0c;就跟我来吧。第一步:首先, 你的手机需要获取root权限. 如果不知道如何获取, 可以到搜索一下安卓…

linux系统如何挂载新硬盘,Linux系统挂载新硬盘操作流程

1、登录后输入fdisk -l命令看当前磁盘信息2、可以看到除了当前的第一块硬盘外还有一块sdb的第二块硬盘&#xff0c;然后用fdisk /dev/sdb 进行分区3、进入fdisk命令&#xff0c;输入h可以看到该命令的帮助&#xff0c;按n进行分区4、这里输入e即分为逻辑分区&#xff0c;按p即分…

linux长期版本维护内容,[图]Linux Kernel 4.20首个维护版本更新发布 已稳定可广泛部署...

Linux Kernel 4.20内核系列由Linus Torvalds于2018年12月23日发布&#xff0c;是目前Linux内核最新的分支。目前在Kernel.org网站上4.20.1版本标记已经从“Mainline”调整为“stable”&#xff0c;意味着可以被大部分Linux发行版本使用。而Arch Linux是首个装备4.20.1的发行版本…

三角函数和反三角函数图像、导数、积分、等式关系

之前对三角函数的理解仅局限于sin&#xff0c;cos&#xff0c;tan。但是目前遇到的都是些csc&#xff0c;sec&#xff0c;cot&#xff0c;arctan&#xff0c;arccos&#xff0c;arcsin。积分和求导还有一堆公式 最近看到了一个六边形记忆法&#xff0c;更加简便。 1.倒三角&am…

linux分区后盘符找不到,为什么我的磁盘不见了,怎么找回来啊?

2006-03-24 02:14:35找不回来了&#xff0c;因为你已经删除了这个分区&#xff0c;也就是说这个分区已经不存在了&#xff0c;文件分配表也被删掉了&#xff0c;所以没有办法找回来。动态、不可读取的意思就是这个空间还没有建立分区。全部2006-03-24 02:14:352006-03-23 12:36…

ds18b20温度传感器驱动编写

协议 DS18B20的一线工作协议流程是&#xff1a;初始化→ROM操作指令→存储器操作指令→数据传输&#xff0c;其工作时序包括&#xff1a;初始化时序、写时序、读时序。 黑色部分表示单片机操作&#xff0c;蓝色部分表示18b20操作&#xff0c;每次主机操作完成之后等待18b20状…

SHT1x/SHT7x数字温湿度传感器驱动编写

结构图 启动传输时序图 SHT10串行通信IO初始化 其中SDA和SCL分别是数据线和时钟线。分别对应单片机的1.1口和1.0口 #define SCL P1_0 //SHT10时钟 #define SDA P1_1 //SHT10数据线由时序图可知&#xff0c;一开始SDA和SCL分别高电平和低电平 /****…

zigbee板子:lcd显示汉字

main函数 #include <ioCC2530.h> #include "LCD.h"void main() {//unsigned char i0; LCD_Init(); //oled 初始化 LCD_CLS(); //屏全亮 LCD_welcome();while(1){} } 首先呢。我们运行这个程序&#xff0c;然后可…

matlab实时采集串口数据并分析串口数据传送格式

下位机 zigbee代码 最近在做基于zigbee的RSSI实时定位系统。这个系统需要我们实时的测量得到每一个位置的rssi值。首先&#xff0c;我需要研究怎么把这个rssi值通过串口传到我们的上位机上。 我们可以看到我们下位机&#xff0c;里面有一个传送数据包的一个东西&#xff0c;在…

matlab guide 打开图像并将图像显示到界面

最近又用到matlab做GUI&#xff0c;之前学的全忘了&#xff0c;还好两年前留了大实验源码。 下面我来通过源码分析一下matlab怎么做GUI。这次我来分析如何通过matlab打开图像并将图像显示到界面。 实验效果 原理 打开菜单编辑器看这个属性&#xff1a; 找到回调 可以看到回调…

matlab guide 将matlab处理过的图片保存

最近又用到matlab做GUI&#xff0c;之前学的全忘了&#xff0c;还好两年前留了大实验源码。 这次我来分析如何将matlab处理过的图片保存。 实验效果 经过灰度转换&#xff0c;图象被处理&#xff0c;并显示到另一个地方。 点击保存 图片被保存 实验原理 查看保存的回调函…

深圳linux测试题库,Linux认证考试题库及答案

Linux认证考试题库及答案1、一个文件的权限是-rw-rw-r--&#xff0c;这个文件所有者的权限是什么()a、read-onlyb、read-writec、write答案 b2、下面哪个值代表多用户启动()a、1b、0c、3d、5答案 c3、下面哪个文件代表系统初始化信息()a、/etc/inittabb、/etc/initc、/etc/proc…

matlab guide 打开excel并对其中数据进行处理

最近又用到matlab做GUI&#xff0c;之前学的全忘了&#xff0c;还好两年前留了大实验源码。 这次我来分析如何通过matlab处理excel数据 实验结果 对excel处理的效果&#xff1a; 实验原理 打开excel回调函数 function openexc_Callback(hObject, eventdata, handles) [fil…

linux 显示文件名写到txt,C++获取某个路径下所有文件的文件名,读写TXT文件到新的文件...

好久没写io操作了&#xff0c;手生了好多&#xff0c;最简单实用的C代码也push上来吧。环境&#xff1a;mac&#xff0c;xcode(注意mac环境下Windows的函数不能用)功能&#xff1a;打开一个文件目录&#xff0c;把所有文件名读取到一个TXT文件中#include #include #include #in…

生成超清分辨率视频,南洋理工开源Upscale-A-Video

大模型在生成高质量图像方面表现出色,但在生成视频任务中&#xff0c;经常会面临视频不连贯、图像模糊、掉帧等问题。 这主要是因为生成式抽样过程中的随机性,会在视频序列中引入无法预测的帧跳动。同时现有方法仅考虑了局部视频片段的时空一致性,无法保证整个长视频的整体连贯…

matlab 文件之间相互调用实例

效果&#xff1a; 找到按钮的回调 function pushbutton1_Callback(hObject, eventdata, handles) cd Deploy Nodes %square_random(100,100,0.03);%布置节点 GPS误差为0 %square_random(1000,300,0.2,30) %GPS误差为30m %C_random([1000,300,300,700],240,0.2); square_regul…

linux+虚拟机上的wdcp,linux虚拟主机服务器wdcp系统教程

满意答案eslct2017.01.29采纳率&#xff1a;47% 等级&#xff1a;9已帮助&#xff1a;1264人linux虚拟主机服务器wdcp系统教程在我们安装了网络服务管理系统wdcp后&#xff0c;可能会有不少疑问还有就是使用过程中出现的问题&#xff0c;下面为大家总结几点比较常见的&#…