数据结构实验报告(C++) 实验3;图结构实验指导(含源码)

 整理一下之前的作业,说不定会帮上别人

如果其中选做题没有源码或没有运行截图,那是因为作者也未完成,请见谅

题目1.统计有向图各顶点的度
题目2.非递归深度优先遍历
题目3.距离最远的顶点
题目4.判断有向图是否存在回路
题目5.判断两个顶点间是否存在路径
题目6.(选做题)判断两个顶点间是否存在指定长度的简单路径

题目1. 统计有向图各顶点的度

实验要求:

  1. 实现一个模板函数StatDegree统计有向图各顶点的度;
  2. 利用编程模板中提供的主函数,测试算法正确性。

实现提示:

本题提供的编程模板包含node.h、lk_list.h、adj_list_graph_vex_node.h、adj_list_dir_graph.h、 lk_queue.h、main.cpp、alg1.h共7个文件,其中node.h包含了单链表结点类模板,lk_list.h包含单链表类模板,adj_list_graph_vex_node.h包含邻接表图顶点结点类模板,adj_list_dir_graph.h 包含有向图的邻接表类模板,lk_queue.h包含链队列模板, main.cpp为测试所使用的主函数。算法实现代码应填写在alg1.h的StatDegree函数中,不可以在其它任何位置添加、删除或更改代码。

算法测试时,第一行输入图顶点个数,第二行输入各顶点的数据元素,接下来输入邻接矩阵,构造出得有向图作为参数传给StatDegree。

输入样例:

4

a b c d

0 1 0 1

0 0 1 0

0 0 0 1

0 0 0 0

输出样例:

各顶点的度为:

a:2

b:2

c:2

d:2

题目2. 非递归深度优先遍历

实验要求:

(1)给无向图的邻接表类模板AdjListUndirGraph添加实现一个模板函数NonRecurDFS实现从一个顶点开始对无向图进行深度优先遍历,不使用递归。

(2)利用编程模板中提供的主函数,测试算法正确性。

实现提示:

本题提供的编程模板包含node.h、lk_list.h、adj_list_graph_vex_node.h、adj_list_undir_graph.h、 lk_queue.h、lk_stack.h、main.cpp、alg2.h共8个文件,其中node.h包含了单链表结点类模板,lk_list.h包含单链表类模板,adj_list_graph_vex_node.h包含邻接表图顶点结点类模板,adj_list_undir_graph.h包含无向图的邻接表类模板,lk_queue.h包含链队列模板,lk_stack.h包含链栈类模板,main.cpp为测试所使用的主函数。算法实现代码应填写在alg2.h的NonRecurDFS函数中,不可以在其它任何位置添加、删除或更改代码。

算法测试时,第一行输入图顶点个数,第二行输入各顶点的数据元素,接下来输入邻接矩阵,构造出得有向图调用alg2.h中的NonRecurDFSTraverse函数,NonRecurDFSTraverse调用NonRecurDFS实现无向图的非递归深度优先遍历。注意遍历时,如果一个顶点有多个未被访问过的邻接点,要求先访问索引较小的顶点。

输入样例:

4

a b c d

0 0 0 1

0 0 1 1

0 1 0 1

1 1 1 0

输出样例:

a  d  b  c 

题目3. 距离最远的顶点

实验要求:

  1. 实现一个模板函数FathestVex返回距离索引为v的顶点最远的顶点索引;
  2. 利用编程模板中提供的主函数,测试算法正确性。

实现提示:

本题提供的编程模板包含node.h、lk_list.h、adj_list_graph_vex_node.h、adj_list_undir_graph.h、 lk_queue.h、main.cpp、alg3.h共7个文件,其中node.h包含了单链表结点类模板,lk_list.h包含单链表类模板,adj_list_graph_vex_node.h包含邻接表图顶点结点类模板,adj_list_undir_graph.h包含无向图的邻接表类模板,lk_queue.h包含链队列模板,main.cpp为测试所使用的主函数。算法实现代码应填写在alg3.h的NonRecurDFS函数中,不可以在其它任何位置添加、删除或更改代码。

算法测试时,第一行输入图顶点个数,第二行输入各顶点的数据元素,接下来输入邻接矩阵,最后一行输入起始顶点的编号,将构造出的无向图以及起始顶点编号作为参数传给FarthestVex。

输入样例:

4

a b c d

0 0 0 1

0 0 1 1

0 1 0 1

1 1 1 0

1

输出样例:

距离b最远的是a

题目4. 判断有向图是否存在回路

实验要求:

  1. 实现一个模板函数HasCycle判断有向图g是否存在回路
  2. 利用编程模板中提供的主函数中测试算法正确性。

实现提示:

本题提供的编程模板包含node.h、lk_list.h、adj_list_graph_vex_node.h、adj_list_dir_graph.h、 lk_queue.h、main.cpp、alg4.h共7个文件,其中node.h包含了单链表结点类模板,lk_list.h包含单链表类模板,adj_list_graph_vex_node.h包含邻接表图顶点结点类模板,adj_list_dir_graph.h 包含有向图的邻接表类模板,lk_queue.h包含链队列模板, main.cpp为测试所使用的主函数。算法实现代码应填写在alg4.h的HasCycle函数中,不可以在其它任何位置添加、删除或更改代码。

算法测试时,第一行输入图顶点个数,第二行输入各顶点的数据元素,接下来输入邻接矩阵,构造出得有向图作为参数传给HasCycle。

输入样例1

4

a b c d

0 1 0 1

0 0 1 0

0 0 0 1

0 0 0 0

输出样例1

图g【不存在】回路

输入样例2

4

a b c d

0 1 0 0

0 0 1 0

0 0 0 1

1 0 0 0

输出样例1

图g【存在】回路

题目5. 判断两个顶点间是否存在路径

实验要求:

(1)实现一个模板函数ExistPath判断有向图g中两个顶点i和j之间是否存在路径。

(2)利用编程模板中提供的主函数,测试算法正确性。

实现提示:

本题提供的编程模板包含node.h、lk_list.h、adj_list_graph_vex_node.h、adj_list_dir_graph.h、 lk_queue.h、main.cpp、alg5.h共7个文件,其中node.h包含了单链表结点类模板,lk_list.h包含单链表类模板,adj_list_graph_vex_node.h包含邻接表图顶点结点类模板,adj_list_dir_graph.h 包含有向图的邻接表类模板,lk_queue.h包含链队列模板, main.cpp为测试所使用的主函数。算法实现代码应填写在alg5.h的ExistPath函数中,不可以在其它任何位置添加、删除或更改代码。

算法测试时,第一行输入图顶点个数,第二行输入各顶点的数据元素,接下来输入邻接矩阵,最后一行输入待判断的两个顶点索引。将构造出的有向图以及两个顶点编号作为参数传给ExistPath。

输入样例1

4

a b c d

0 1 0 1

0 0 1 0

0 0 0 1

0 0 0 0

0 1

输出样例1

a到b【存在】路径

输入样例2

4

a b c d

0 1 0 1

0 0 1 0

0 0 0 1

0 0 0 0

1 0

输出样例2

b到a【不存在】路径

题目6. (选做题)判断两个顶点间是否存在指定长度的简单路径

实验要求:

(1)实现一个模板函数ExistPathLen判断有向网net中两个顶点i和j之间是否存在长度为k的简单路径。

(2)利用编程模板中提供的主函数,测试算法正确性。

实现提示:

本题提供的编程模板包含node.h、lk_list.h、adj_list_network_vex_node.h、adj_list_network_edge.h、adj_list_dir_network.h、 lk_queue.h、main.cpp、alg6.h共8个文件,其中node.h包含了单链表结点类模板,lk_list.h包含单链表类模板,adj_list_network_vex_node.h包含邻接表网顶点结点类模板,adj_list_network_edge.h 包含邻接表网边数据类模板,adj_list_dir_network.包含有向网的邻接表类模板,lk_queue.h包含链队列模板, main.cpp为测试所使用的主函数。算法实现代码应填写在alg6.h的ExistPathLen函数中,不可以在其它任何位置添加、删除或更改代码。

算法测试时,第一行输入有向网顶点个数,第二行输入各顶点的数据元素,接下来输入邻接矩阵,最后一行输入待判断的两个顶点索引i和j以及指定的路径长度k。将构造出的有向网以及i,j,k作为参数传给ExistPathLen。

输入样例1

5

a b c d e

0 0 6 0 0

0 0 0 0 3

0 1 0 0 0

5 0 0 0 0

0 0 9 8 0

0 1 7

输出样例1

a到b【存在】长度为7路径

输入样例2

5

a b c d e

0 0 6 0 0

0 0 0 0 3

0 1 0 0 0

5 0 0 0 0

0 0 9 8 0

0 1 8

输出样例2

a到b【不存在】长度为8路径

完成后的源码:
:数据结构实验报告(C++)实验3;图结构实验指导程序源码-C++文档类资源-CSDN文库

链接:https://pan.baidu.com/s/1VLDRcuGkj_WWMZTsxeE3QA?pwd=gj3s 提取码:gj3s

题目: 为某高校的学籍和成绩管理设计一系统。要求建立的数据有: (1)学生类,包班级号、学号、姓名、专业等成员; (2)学生成绩类,包班级号、学号,课程名,成绩等成员。 完成下列功能:首先输入学生数据及成绩数据,再根据提示分别实现查找功能。其中:  函数 Xslr 负责学生数据录入;  函数 Cjlr 负责成绩数据录入;  函数 Look1 负责根据姓名查找学生的基本信息和成绩信息;  函数 Look2 负责根据班级列出学生的基本信息;  函数 Dayin1 负责依据班级输出满足条件的学生的基本情况;  函数 Dayin2 负责输出某一同学的成绩单。   题目: 设计一个电子通信录。其中包括如下类: (1)通信地址类 addr。包公有数据:  成员 char post[10]; //邮编  成员 char ad[40]; //家庭地址  构造函数 addr(char p[10]="",char a[40]="");  成员函数 void setadd(addr a); //用 a 为当前对象赋值 (2)出生年月类 birth。包公有数据:  成员 int year; //年份  成员 int month; //月份  成员 int day; //日期  构造函数 birth(int y=0,int m=0,int d=0);  成员函数 void setbir(birth b); //用 b 为当前对象赋值 (3)类 friends。包数据:  私有成员 int number; //序号  私有成员 char name[20]; //姓名  私有成员 char sex; //性别  私有成员 char telephone[13]; //联系电话  公有成员 birth bir; //出生年月  公有成员 addr add; //通信地址  公有构造函数 friends(int nu=0,char n[20]=" ",char s=' ',int y=0,int m=0,int d=0,char p[10]=" ",char a[40]=" ",char t[13]=" ");  公有成员函数 void setfri(int nu,char n[20],char s,birth b,addr a,char t[13]); //为 当前对象赋值  公有成员函数 friends input(friends &bb); //为对象 bb 输出数据  公有成员函数 int search(friends aa[100],char n[20]); //在 aa 中查找姓名为 n 的对象  公有成员函数 void show(friends aa); //输出对象 aa  公有成员函数 void delet(friends aa[100],int k); //在 aa 中删除下标为 k 的元素 (4)在主函数中完成主菜单的设计,并根据输入值完成所需操作。  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值