实现教材算法7.2利用邻接矩阵构造无向图的算法,在此基础上进行深度优先遍历和广度优先遍历。
软件学院实验报告 |
||||||||
姓名: 学号: 专业: 年级: |
||||||||
课程名称 |
数据结构 |
|||||||
实验名称 |
实验9、图的遍历 |
|||||||
实验的准备阶段 |
实验内容 |
(1)实验目的 通过该实验,使学生掌握图的几种存储结构,理解图的深度优先和广度优先遍历算法的思想和实现办法, (2)实验内容 实现教材算法7.2利用邻接矩阵构造无向图的算法,在此基础上进行深度优先遍历和广度优先遍历。 (3)参考界面 (4)验收/测试用例
屏幕输出邻接矩阵 0 1 0 0 0 1
1 0 1 1 0 0 0 1 0 1 1 0 0 1 1 0 1 0 0 0 1 1 0 1 1 0 0 0 1 0
屏幕输出: 1 2 3 4 5 6
屏幕输出:1 2 6 3 4 5
|
||||||
实验类型 |
验证性 |
|||||||
实验的重点、难点 |
重点: 图遍历 难点: 图的深度优先遍历 |
|||||||
实验环境 |
VC++6.0 |
|||||||
实验的实施阶段 |
实验步骤及完成任务情况 |
一、设计思想 二、主要源代码 #include<iostream> #include<stdlib.h> #define MaxVertexNum 100 #define OK 1 #define ERROR 0 using namespace std; typedef int status; typedef int vertex; typedef int weightType; struct QNode; typedef QNode* PtrtoQNode; struct _Queue; typedef struct _Queue* Queue; struct QNode{ vertex v; PtrtoQNode next; }; struct _Queue{ PtrtoQNode front; PtrtoQNode rear; }; struct eNode; typedef struct eNode* edge; struct GNode; typedef struct GNode* PtrToGNode; typedef struct GNode* MGraph; struct eNode{ vertex v; vertex w; weightType weight; }; struct GNode{ int vn,en; weightType G[MaxVertexNum][MaxVertexNum]; }; bool visited[MaxVertexNum]; MGraph create(){ MGraph G=(MGraph)malloc(sizeof(struct GNode)); return G; } status insert(edge e,MGraph G){ G->G[e->v][e->w]=e->weight; G->G[e->w][e->v]=e->weight; return OK; } MGraph build(MGraph G){ cout<<"输入vertexNum"<<endl; cout<<"输入edgeNum"<<endl; int vn; cin>>G->vn; cin>>G->en; cout<<"输入edge"<<endl; edge e=(edge)malloc(sizeof(struct eNode)); for(int i=0;i<G->en;i++){ cin>>e->v>>e->w>>e->weight; insert(e,G); } return G; } status show(MGraph G){ for(int i=1;i<=G->vn;i++){ for(int j=1;j<=G->vn;j++){ cout<<G->G[i][j]<<' '; } cout<<endl; } return OK; } status DFS(MGraph G,vertex v){ visited[v]=true; cout<<v<<' '; for(int i=1;i<=G->vn;i++){ if(G->G[v][i]&&!visited[i]) DFS(G,i); } return OK; } Queue InitQueue(){ Queue Q=(Queue)malloc(sizeof(struct _Queue)); Q->front=Q->rear=(PtrtoQNode)malloc(sizeof(struct QNode)); Q->front->next=NULL; return Q; } status EnQueue(vertex v,Queue Q){ PtrtoQNode p=(PtrtoQNode)malloc(sizeof(struct QNode)); p->v=v; p->next=NULL; Q->rear->next=p; Q->rear=p; return OK; } status DeQueue(Queue Q,vertex* v){ *v=Q->front->next->v; PtrtoQNode p=Q->front->next; if(p==Q->rear){ free(p); Q->rear=Q->front; return OK; } else{ Q->front->next=p->next; free(p); return OK; } } status BFS(MGraph G,vertex v){ Queue Q=InitQueue(); EnQueue(v,Q); visited[v]=true; vertex w; while(Q->front!=Q->rear){ DeQueue(Q,&w); cout<<w<<' '; for(int i=1;i<=G->vn;i++){ if(G->G[w][i]&&!visited[i]){ visited[i]=true; EnQueue(i,Q); } } } } void set(bool visited[]){ for(int i=0;i<MaxVertexNum;i++) { visited[i]=false; } } int main(){ set(visited); MGraph G=create(); int i; do{ cout<<"***************\n" <<"***无向网图****\n" <<"1.构建网图\n" <<"2.输出邻接矩阵\n" <<"3.深度优先遍历\n" <<"4.广度优先遍历\n" <<"5.退出\n" << "***************\n" << "***************\n" <<endl; cin>>i; system("cls"); switch(i){ case 1: G=build(G); cout<<"OK"<<endl; break; case 2: show(G); cout<<"OK"<<endl; break; case 3: if(DFS(G,1)) cout<<endl<<"OK"<<endl; set(visited); break; case 4: if(BFS(G,1)) cout<<endl<<"OK"<<endl; set(visited); break; default: break; } system("pause"); system("cls"); }while(i!=5); return 0; } |
||||||
实验结果的处理阶段 |
实验结果 |
(注意:请同学们看完要求,把本段红色文字删除!!!)粘贴运行结果的截图,并适当用文字描述运行结果。 |
||||||
实验结果总结 |
(注意:请同学们看完要求,把本段红色文字删除!!!) 写自己遇到的问题,以及解决的方法。至少写两个。 或者写遇到的一个问题,写一段自己的收获,自己学会了什么。 |
实现教材算法7.2利用邻接矩阵构造无向图的算法,在此基础上进行深度优先遍历和广度优先遍历。相关推荐
- 图:图的邻接矩阵创建、深度优先遍历和广度优先遍历详解
邻接矩阵介绍 直接说,邻接矩阵是图的一种存储结构.那么图是什么呢?图是一种逻辑结构,和线性结构.树形结构.集合结构一样 是一种逻辑结构用来描述数据对象中的数据元素之间的关系.来看下图的定义:图(Gra ...
- 数据结构之图:邻接矩阵和邻接表、深度优先遍历和广度优先遍历
简介 线性表是一种线性结构,除了头结点和尾节点,线性表的每个元素都只有一个前取节点和一个后继节点.而树结构则相较于线性表更加复杂,它描述的关系为数据元素之间的父子关系,也是现实世界父子关系的缩影, 一 ...
- 数据结构—无向图创建邻接矩阵、深度优先遍历和广度优先遍历(C语言版)
无向图创建邻接矩阵.深度优先遍历和广度优先遍历 一.概念解析: (1)无向图: (2)邻接矩阵: 二.创建邻接矩阵: 三.深度遍历.广度遍历 (1)深度遍历概念: (2)广度遍历概念: 四.实例展示 ...
- TF之TFSlim:利用经典VGG16模型(InceptionV3)在ImageNet数据集基础上训练自己的五个图像类别数据集的训练过程记录
TF之TFSlim:利用经典VGG16模型(InceptionV3)在ImageNet数据集基础上训练自己的五个图像类别数据集的训练过程记录 目录 训练控制台显示 输出结果文件 训练控制台显示 输出结 ...
- 分别用邻接矩阵和邻接表实现图的深度优先遍历和广度优先遍历_数据结构与算法学习笔记:图...
图: 图结构区别于线性结构和树型结构,区别可见下图 逻辑上的图(graph)结构由顶点(vertex)和边(edge)组成. 一个图结构G包含顶点集合V和边集合E,任何两个顶点之间可以有一个边表示两者 ...
- 分别用邻接矩阵和邻接表实现图的深度优先遍历和广度优先遍历_数据结构与算法:三十张图弄懂「图的两种遍历方式」...
原创: 进击的HelloWorld1 引言遍历是指从某个节点出发,按照一定的的搜索路线,依次访问对数据结构中的全部节点,且每个节点仅访问一次. 在二叉树基础中,介绍了对于树的遍历.树的遍历是指从根节点 ...
- 算法:深度优先遍历和广度优先遍历
什么是深度.广度优先遍历 图的遍历是指,从给定图中任意指定的顶点(称为初始点)出发,按照某种搜索方法沿着图的边访问图中的所有顶点,使每个顶点仅被访问一次,这个过程称为图的遍历.遍历过程中得到的顶点序列 ...
- Java数据结构之图的基本概念和算法,深度优先遍历DFS,广度优先遍历BFS(图解)
文章目录 前言 一.图的基本概念 1.图的定义 2.基本术语 二.图的基本算法 1.初始化图 2.插入顶点和边 3.矩阵打印 4.返回第一个邻接结点的下标 5.返回第一个邻接结点的下一个结点的下标 三 ...
- python、java实现二叉树,细说二叉树添加节点、深度优先(先序、中序、后续)遍历 、广度优先 遍历算法...
数据结构可以说是编程的内功心法,掌握好数据结构真的非常重要.目前基本上流行的数据结构都是c和c++版本的,我最近在学习python,尝试着用python实现了二叉树的基本操作.写下一篇博文,总结一下, ...
最新文章
- Seam开发环境中的中文乱码问题
- AWS — AWS Local Zone
- CString 用法
- 爆点客源4.1.0活动营销应用56版 修复朋友圈不显示问题
- linux+模块与设备关系,linux内核设计与实现读书笔记——设备和模块
- Linux从初学到精通
- 谷歌Deep Dream解析(附源代码,可以直接运行)
- 【图像去噪】基于matlab GUI均值+中值+高通低通+巴特沃斯+PCA+小波+维纳滤波图像去噪【含Matlab源码 1705期】
- 第十届飞思卡尔杯智能车竞赛规则解读
- QML之gradient
- 真的有必要读研究生吗?
- Android 11.0 12.0修改搜狗为默认输入法,并且授予运行权限
- PPIO数据碎片化分散存储
- nyoj 月老的难题【最大匹配】
- Chrome 设置黑色模式
- 华为开发者大会主题演讲:3D建模服务让内容高效生产
- iOS:quartz2D绘图(绘制渐变图形)
- 联想台式计算机g50500i,联想台式电脑的价格及配置
- Numpy+Pandas+Matplotlib学习
- 企业网盘+超融合,联想云加速的双引擎
热门文章
- 10个最好的 JavaScript 动画库【值得收藏】
- GitHub怎么用 GitHub是什么 新手怎么用GitHub 图文并茂,不看都不行
- pip安装gunicorn_gunicorn安装报错
- 原生的 即时聊天前端 可插入图片,表情(没用html编辑器插件)
- Linux服务器启动tomcat(详细教程避免踩坑)
- CSRF攻击防御方法
- 好心情患者故事 | 抑郁时,我伪装出了一个积极健康的自己
- Linux命令:du+find分析目录大小,清理空间
- 思想调试:为什么4核CPU上只有一个核在工作?
- javascript中元素的scrollLeft和scrollTop属性说明