#include <iostream> #include <algorithm> #include <cstdio> #include <cmath> #include <cstring> #include <string> #include <string.h> #include <map> #include <set> #include <queue> #include <deque> #include <list> #include <bitset> #include <stack> #include <stdlib.h> using namespace std; /* 实验四 图的有关操作 实验学时 4学时 背景知识:图的存储、遍历、及其应用。 目的要求 1.掌握图的存储思想及其存储实现。 2.掌握图的深度、广度优先遍历算法思想及其程序实现。 3.掌握图的常见应用算法的思想及其程序实现。 实验内容: 1.键盘输入数据,建立一个有向图的邻接表。 2.输出该邻接表。 *3.建立一个无向图的十字链表。 4.在有向图的邻接表的基础上计算各顶点的度,并输出。 5.以有向图的邻接表为基础实现输出它的拓扑排序序列。 *6.采用邻接矩阵存储一个有向图,输出单源点到其它顶点的最短路径。 7.采用邻接表存储实现无向图的深度优先非递归遍历。 8.采用邻接表存储实现无向图的广度优先遍历。 *9.采用邻接矩阵存储实现无向图的最小生成树的PRIM算法。 *10.判断无向图任意两个顶点间是否有路径,若有输出路径上的顶点序列。 11.在主函数中设计一个简单的菜单,分别调试上述算法。 *12.综合训练:为计算机专业设计教学计划:4个学年,每学年2个学期,开设50门课程,每学期所开课程门数尽量均衡,课程的安排必须满足先修关系。 实验说明 1.类型定义(邻接表存储) #define MAX_VERTEX_NUM 8 //顶点最大个数 typedef struct ArcNode {int adjvex; struct ArcNode *nextarc; int weight; //边的权 }ArcNode; //表结点 #define VertexType int //顶点元素类型 typedef struct VNode {int degree,indegree;//顶点的度,入度 VertexType data; ArcNode *firstarc; }VNode/*头结点,AdjList[MAX_VERTEX_NUM]; typedef struct{ AdjList vertices; int vexnum,arcnum;//顶点的实际数,边的实际数 }ALGraph; 2.上述类型定义可以根据实际情况适当调整。 3.算法7、8分别利用栈、队列实现非递归算法。 注意问题 1.注意理解各算法实现时所采用的存储结构。 2.注意区别正、逆邻接。 */ #define MAXSIZE 20 int indegree[MAXSIZE],outdegree[MAXSIZE];// typedef char InfoType;//邻接表存储结构类型 typedef char VertexType;//节点数据类型 typedef struct Arcnode//表结点 { int adjvex;//存放结点的下表 Arcnode *nextarc;//指向下一条弧的指针域 InfoType *info;//该弧相关信息的指针 }Arcnode; typedef struct VNode//头结点 { VertexType data; Arcnode *firstarc; }VNode,AdjList[MAXSIZE]; typedef struct { AdjList vertices; int vexnum;//顶点数 int arcnum;//边数 int kind;//0为无向图,1为有向图 }ALGraph; int visited[MAXSIZE];//辅助数组,标志是否访问过 void Create_Graph(ALGraph &G)// { char ch1,ch2; int k1,k2; cout<<"输入顶点数和边数"<<endl; cin>>G.vexnum>>G.arcnum;// cout<<"输入图的顶点"<<endl; for(int i=1;i<=G.vexnum;i++) { getchar(); cin>>G.vertices[i].data; G.vertices[i].firstarc = NULL; } cout<<"请输入边"<<endl; for(int i=1;i<=G.arcnum;i++) { getchar(); cin>>ch1>>ch2; for(int j = 1;j<=G.arcnum;j++) if(G.vertices[j].data == ch1) { k1 = j; break; } for(int j&
数据结构实验——图的基本操作(未完待续)
最新推荐文章于 2023-02-26 21:45:21 发布
这篇博客介绍了如何使用C++实现图的邻接表存储,并提供了创建图、输出图、计算顶点度、深度优先遍历(DFS)、广度优先遍历(BFS)等操作的代码示例。通过这些操作,读者可以理解和掌握图的基本操作及其实现。
摘要由CSDN通过智能技术生成