实验项目六 图结构基本操作的实现

课程名称:数据结构

实验项目名称:图结构基本操作的实现

实验目的:

1.掌握图的基本操作—遍历。

实验要求:

1、    分别用DFS和BFS的方法实现一个无向图的遍历。

实验过程:

1、    创建一个图(可用邻接矩阵或邻接表的方式进行存储);

2、    输入选项:0或1,0为DFS,1为BFS。

3、    分别输出DFS和BFS两种遍历序列;

实验报告中给出DFS和BFS两种遍历的算法代码。

实验结果:

1、输入顶点集:1 2 3 4 5 6 7 8

2、输入边的集合: 1  2

1  3

2  4

2  5

4  8

5  8

3  6

3  7

6  7

输入:0(DFS)

输出:DFS遍历序列为:12485367

输入:1(BFS)

输出:BFS遍历序列为:12345678

实验分析:

1.简单分析DFS与BFS实现时用到的方法(DFS通过递归函数实现,用到栈的数据结构,BFS用到队列的数据结构);

2.列举调试运行过程中出现的错误并分析原因。

要求:

(1) 程序要添加适当的注释,程序的书写要采用缩进格式。

(2) 程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应。

(3) 程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。

(4) 上传源程序到课堂派。顺序表的源程序保存为TraversalGraph.cpp。

#include<stdio.h>
#include<iostream>
using namespace std;
#define MaxInt 32767     //表示极大值
#define  MVNum 100       //最大定点数
#define OK 1
#define MAXQSIZE 100typedef char VerTexType;   //假设顶点的数据类型为字符型
typedef int ArcType;       //假设边的权值类型为整型
typedef struct
{VerTexType vexs[MVNum];    //定点表ArcType arcs[MVNum][MVNum];    //邻接矩阵int vexnum,arcnum;      //图的当前点和边数
}AMGraph; AMGraph G;typedef struct
{  int *base;  int front,rear;
}SqQueue;  int InitQueue(SqQueue &Q)
{//构造一个空队列QQ.base=new int[MAXQSIZE];    //为队列分配一个最大容量为MAXQSIZE的数组空间if(!Q.base) exit(0);        //存储分配失败Q.front=Q.rear=0;                  //头指针和尾指针为零,队列为空return OK;     }int EnQueue(SqQueue &Q,int e){//插入元素e为Q的新的队尾元素if((Q.rear+1)%MAXQSIZE==Q.front)   //尾指针在循环意义上加1后等于头指针,表明队满return 0;Q.base[Q.rear]=e;                //新元素插入队尾Q.rear=(Q.rear+1)%MAXQSIZE;       //队尾指针加1return OK; }int DeQueue(SqQueue &Q,int &e){//删除Q的队头元素,用e返回其值if(Q.front==Q.rear) return 0;   //队空e=Q.base[Q.front];                  //保存队头元素Q.front=(Q.front+1)%MAXQSIZE;       //队头指针加1 return OK; }int QueueEmpty(SqQueue &Q)
{if (Q.front==Q.rear)   return OK;else return 0;
}int LocateVex(AMGraph G,int b)
{int a;for(a=0;a<G.vexnum;a++)   //判断顶点在第几个位置
    {if(G.vexs[a]==b)  return a;}} int CreateUDN(AMGraph &G)
{//采用邻接矩阵表示法,创建无向网Gcout<<"请输入顶点的个数:\n"; cin>>G.vexnum;           //输入总顶点数cout<<"请输入边的条数:\n";cin>>G.arcnum;        //输入总边数 int i,j,k,v1,v2,w;cout<<"依次输入顶点的信息:\n";for(i=0;i<G.vexnum;i++)       //依次输入点的信息 cin>>G.vexs[i];for(i=0;i<G.vexnum;i++)       //初始化邻接矩阵,边的权值位置为极大值MaxInt for(j=0;j<G.vexnum;j++)G.arcs[i][j]=0;for(k=0;k<G.arcnum;k++)        //构造邻接矩阵
    {cout<<"输入一条边依附的顶点:  ";cin>>v1>>v2;         //输入一条边依附的顶点及权值
//        i=LocateVex(G,v1);
//        j=LocateVex(G,v2);       //确定v1和v2在G中的位置,及顶点数组的下标
//        G.arcs[i][j]=w;          //变<v1,v2>的初值置为w
//        G.arcs[j][i]=G.arcs[i][j];    //置<v1,v2>的对称边<v2,v1>的权值为w G.arcs[v1][v2]=1;G.arcs[v2][v1]=1;} return OK;
}bool visited[MVNum];      //访问标志数组,其初值为“false”
void DFS_AM(AMGraph G,int v)
{//从第V个定点出发递归的深度优先遍历图G cout<<v;int w; visited[v]=1;      //访问第v个顶点,并置访问标志数组相应分量值为truefor(w=1;w<=G.vexnum;w++) if((G.arcs[v][w]!=0)&&(!visited[w]))DFS_AM(G,w);
}void DFSTraverse(AMGraph G)
{//对非连接图G做深度优先遍历int v;for(v=0;v<G.vexnum;++v)     visited[v]=0;for(v=1;v<=G.vexnum;++v)if(!visited[v])   DFS_AM(G,v);      //对尚未访问的顶点调用DFS

}void BFS(AMGraph G,int v)
{//按广度优先非递归遍历连接图cout<<v;int u,w;SqQueue Q;
//    for(w=0;w<G.vexnum;w++)
//    {
//        visited[w]=0;
//    }visited[v]=1;InitQueue(Q);EnQueue(Q,v);while(!QueueEmpty(Q)){DeQueue(Q,u);for(w=1;w<=G.vexnum;w++)if((G.arcs[u][w]!=0)&&(!visited[w])){cout<<w;visited[w]=1;EnQueue(Q,w);}}}main()
{ CreateUDN(G);int choose,v;while(1){    cout<<"请输入功能0(DFS)或1(BFS):\n";cin>>choose;if(choose==0){DFS_AM(G,1);break;} else if(choose==1){BFS(G,1);break;}else{cout<<"输入错误,请重新输入:\n";}        }}

转载于:https://www.cnblogs.com/xisheng/p/7818885.html

图的基本操作实现(数据结构实验)相关推荐

  1. 图的基本操作(数据结构实验报告)

    数据结构 之 图的基本操作 实验报告 文章目录 数据结构 之 图的基本操作 实验报告 一. 实验目的 二. 实验内容 三.实验要求 四. 代码 五.运行结果 一. 实验目的 ​ (1)理解图的基本术语 ...

  2. python数据结构实验目的_图的基本操作实现(数据结构实验)

    课程名称:数据结构 实验项目名称:图结构基本操作的实现 实验目的: 1.掌握图的基本操作-遍历. 实验要求: 1. 分别用DFS和BFS的方法实现一个无向图的遍历. 实验过程: 1. 创建一个图(可用 ...

  3. C++数据结构实验--图的基本操作

    实验四 图的基本操作 1.实验内容与要求 理解邻接矩阵和邻接表的概念 任选一种存储方式实现以下操作:图的构造.深度优先遍历以及广度优先遍历 选作:最小生成树和最短路径. 2.实验环境 硬件环境:计算机 ...

  4. 数据结构实验报告:图的基本操作及应用

                                                图的遍历 一.实验目的 1.使学生可以巩固所学的有关图的基本知识. 2.熟练掌握图的存储结构. 3.熟练掌握图的 ...

  5. 数据结构实验六 图的操作实现

    数据结构实验六 图的操作实现 一.实验目的 1. 理解图的存储结构与基本操作: 2. 掌握图的创建过程 二.实验内容 1.根据下图,采用邻接矩阵的存储结构保存此图,并打印出邻接矩阵. 图的创建代码参考 ...

  6. 【数据结构 图】数据结构实验--图及其应用

    数据结构实验–图及其应用 (代码有一些纰漏 仅供自己后期修改保存用) 数据结构上机实验 题目:设计并验证如下算法: 带权图采用邻接表表示,实现无向图的广度优先搜索BFS与有向图的深度优先搜索DFS. ...

  7. sdut 3335 数据结构实验之栈与队列八:栈的基本操作

    数据结构实验之栈与队列八:栈的基本操作 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descri ...

  8. 数据结构实验八 图及其应用

    数据结构实验八 图及其应用 实验内容 1.编写一个程序,完成如下功能: (1) 建立如下有向图G1的邻接矩阵输出,并由邻接矩阵产生邻接表输出之: (2) 输出图G1从顶点0开始的深度优先遍历序列: ( ...

  9. 数据结构实验报告,二叉树的基本操作(C语言)

    数据结构实验报告,二叉树的基本操作(C语言) 作者:命运之光 专栏:数据结构 目录 数据结构实验报告,二叉树的基本操作(C语言) 实验六 二叉树的基本操作 一.需求分析 二.概要设计 三.详细设计 四 ...

最新文章

  1. 奇点汽车打算明年推L3自动驾驶,不用激光雷达
  2. EGO首次线下活动分享:Facebook研发团队的高效秘诀
  3. 开源示波器Scopefun介绍、原理图学习
  4. csgo国服文件转国际服务器,csgo国际服怎么转国服 csgo国际服转到国服方法介绍...
  5. Android Log等级的介绍
  6. Linux课程第二十一天学习笔记
  7. 手机端放在线条中间的标题
  8. VBF BETA 1.5 发布了
  9. 在 Mac 上如何将 Better Zip 设置为自动更新?
  10. Hadoop的安装和使用
  11. 第三方支付3(易宝支付)
  12. 图灵奖得主Alan Kay如何读书
  13. Curve fitting C: Non-linear Iterative Curve Fitting中文翻译
  14. 2020年系统集成项目管理工程师上午真题及答案(一)
  15. 定量/高光谱遥感之——光谱分析技术
  16. iPhone 自动关机 原因 天气太冷
  17. 内网服务器(不通外网)访问高德在线地图服务的方法
  18. 百度为什么打不开!最新消息~
  19. 想要了解大厂PM吗,来看看这几款软件
  20. 一个小屁孩对父母说的经典话

热门文章

  1. Reflector 插件-Reflexil
  2. mysql中文注释语法报错_Linux系统Python配置MySQL详细教程
  3. easyScholar——文献数据库插件
  4. 想要一篇高分SCI,这些临床统计的诀窍你要知道
  5. 学术好帮手Publons使用指南
  6. [Flask+Vue]Books全栈应用
  7. maven版本高于idea
  8. linux为什么开机后有多个内核,CentOS7开机界面出现多个内核选项
  9. 人工智能-机器学习=深度学习-其他
  10. 神经网络 | DeepVO:Towards End-to-End Visual Odometry