首页 > 其他分享 >数据结构实验8

数据结构实验8

时间:2025-01-10 17:16:19浏览次数:1  
标签:vmin arcs int MVNum vo 实验 Path 数据结构

7-2 迪杰斯特拉方法实现最短路径
用迪杰斯特拉算法实现有向网的最短路径

输入格式:
第一行输入有向网的顶点和边数,第二行输入各顶点值,用空格间隔,第三行开始输入各条边的 两个点的及边上的权值,用空格间隔。最后一行输入要求路径的两个顶点。

输出格式:
输出最短路径经过的各顶点,中间用-->连接。

输入样例:
在这里给出一组输入。例如:

6 8
0 1 2 3 4 5
0 2 10
0 4 30
0 5 100
1 2 5
2 3 50
3 5 10
4 3 20
4 5 60
0 3
输出样例:
在这里给出相应的输出。例如:

0-->4-->3

`#include
using namespace std;
typedef int VexType;

define MVNum 100

define MaxInt 32767

int S[MVNum],Path[MVNum],D[MVNum];
typedef struct{
VexType vexs[MVNum];
int arcs[MVNum][MVNum];
int vexnum,arcnum;
}AMGraph;
int LocateVex(AMGraph G,VexType v){
for(int i=0;i<G.vexnum;++i)
if(G.vexs[i]v)return i;
return -1;
}
void CreatAMGraph(AMGraph &G,int &err){
cin>>G.vexnum>>G.arcnum;
for(int i=0;i<G.vexnum;++i)cin>>G.vexs[i];
for(int i=0;i<G.vexnum;++i)
for(int j=0;j<G.vexnum;++j)
G.arcs[i][j]=MaxInt;
for(int k=0;k<G.arcnum;++k){
VexType v1,v2;
int w;
cin>>v1>>v2>>w;
int i=LocateVex(G,v1),j=LocateVex(G,v2);
if(i
-1||j==-1)
err=1;
else
G.arcs[i][j]=w;
}
}
void ShortestPath_DIJ(AMGraph G,int vo){
for(int v=0;v<G.vexnum;++v){
S[v]=0;
D[v]=G.arcs[vo][v];
if(D[v]<MaxInt)Path[v]=vo;
else Path[v]=-1;
}
S[vo]=1;D[vo]=0;
for(int k=0;k<G.vexnum-1;++k){
int wmin=MaxInt,vmin;
for(int w=0;w<G.vexnum;++w){
if(!S[w]&&D[w]<wmin){
vmin=w;wmin=D[w];
}
}
S[vmin]=1;
for(int i=0;i<G.vexnum;++i){
if(!S[i]&&(D[vmin]+G.arcs[vmin][i]<D[i])){
D[i]=D[vmin]+G.arcs[vmin][i];
Path[i]=vmin;
}
}
}
}

int main(){
AMGraph G;
int err=0;
VexType vo,ve;
CreatAMGraph(G,err);
cin>>vo>>ve;
int i=LocateVex(G,vo),j=LocateVex(G,ve);
if(i!=-1&&j!=-1){
ShortestPath_DIJ(G,i);
int adj[MVNum],k=1;
adj[0]=j;
while(Path[j]!=i){
adj[k]=Path[j];
j=Path[j];
++k;
}
adj[k]=i;
for(int n=k;n>=0;--n){
if(n!=0)cout<<G.vexs[adj[n]]<<"-->";
else cout<<G.vexs[adj[n]];
}
}
return 0;
}`

标签:vmin,arcs,int,MVNum,vo,实验,Path,数据结构
From: https://www.cnblogs.com/LiuHuWei/p/18664276

相关文章

  • 数据结构实验9
    7-1整型关键字的散列映射给定一系列整型关键字和素数p,用除留余数法定义的散列函数H(key)=key%p将关键字映射到长度为p的散列表中。用线性探测法解决冲突。输入格式:输入第一行首先给出两个正整数n(≤1000)和p(≥n的最小素数),分别为待插入的关键字总数、以及散列表的长度。......
  • 数据结构实验10
    6-4快速排序本题要求实现快速排序的一趟划分函数,待排序列的长度1<=n<=1000。函数接口定义:intPartition(SqListL,intlow,inthigh);其中L是待排序表,使排序后的数据从小到大排列。类型定义:typedefintKeyType;typedefstruct{KeyTypeelem;/elem[0]一般作哨......
  • uml实验一
    统一建模语言实验题目申请单班级 信2305-3姓名 徐戌学号 20234316系统名称 酒店预约系统系统描述(初步)应用目的:通过信息化手段提升酒店的运营效率、管理水平和客户服务质量,帮助酒店在运营、管理、财务、客户服务等方面实现自动化、数据化和智能化进而实现酒店资源的合......
  • uml实验四
    实现视图模型建模班级:信2305-3学号:20234316姓名:20234316一实验目的 理解顺序图、协作图、活动图、状态机图的概念及其在系统分析设计中的作用; 了解和掌握软件工程中用例逻辑时序的分析方法; 掌握两种交互图(顺序图和协作图)的差别; 掌握描述一个操作执......
  • uml实验三
    逻辑视图模型建模班级:信2305-3学号:20234316姓名:徐戌一实验目的 理解面向对象系统分析和对象类建模的概念; 了解和掌握面向对象系统分析的方法和步骤; 了解和掌握寻找待开发系统中类的方法和技巧; 了解和掌握分析类之间继承关系的方法; 了解和掌握分析类......
  • 数据结构实验1
    7-1线性表A,B顺序存储合并有两张非递增有序的线性表A,B,采用顺序存储结构,两张表合并用c表存,要求C为非递减有序的,然后删除C表中值相同的多余元素。元素类型为整型输入格式:第一行输入输入表A的各个元素,以-1结束,中间用空格分隔;第二行输入表B的各个元素,以-1结束,中间用空格分隔。输......
  • uml实验五
    部署视图模型建模班级:信2305-3学号:20234316姓名:徐戌一实验目的 了解系统物理体系结构模型和表示方法; 了解部署图的概念及其在系统设计中的作用; 掌握使用RationalRose绘制部署图的方法;二实验环境及实验准备 所需硬件环境为微机; 所需软件环境为Ra......
  • 数据结构实验二
    石家庄铁道大学实验报告课程名称:信2305-3 任课教师:刘丹 实验日期:2024.12.11班级:信2305-3 姓名:徐戌 学号:20234316实验项目名称:实验二一、 实验目的1.掌握栈的定义及......
  • 数据结构实验一
    石家庄铁道大学实验报告课程名称:数据结构与算法设计 任课教师:刘丹 实验日期:2024.12.11班级:信2305-3 姓名:徐戌 学号:20234316实验项目名称:实验一一、 实验目的掌握顺序表的......
  • 数据结构实验2
    7-2双向循环链表应用已知p指向双向循环链表中的一个结点,其结点结构为data、prior、next三个域,实现交换p所指向的结点和它的前缀结点的顺序。输入格式:第一行输入元素个数,第二行输入元素值,第三行输入要交换的元素值,第四行输出结果。输出格式:输出交换后的结果,中间不用空格分......