实验报告:图的存储结构和遍历

实验报告:图的存储结构和遍历
实验报告:图的存储结构和遍历

武汉东湖学院

实验报告

学院:计算机科学学院—专业计算机科学与技术2016年11月18日

1.实验目的

(1)了解邻接矩阵存储法和邻接表存储法的实现过程。

(2)了解图的深度优先遍历和广度优先遍历的实现过程。

2.实验内容

1.采用图的邻接矩阵存储方法,实现下图的邻接矩阵存储,并输出该矩阵

2.设计一个将第1小题中的邻接矩阵转换为邻接表的算法,并设计一个在屏幕上显示邻接表的算法

3.实现基于第2小题中邻接表的深度优先遍历算法,并输出遍历序列

4.实现基于第2小题中邻接表的广度优先遍历算法,并输出遍历序列

3.实验环境Visual C++ 6.0

4 .实验方法和步骤(含设计)

我们通过二维数组中的值来表示图中节点与节点的关系。通过上图可 知,

其邻接矩阵示意图为如下: V0

v1 v2 v3 v4 v5 V0

1 0

1 0

1

V1 1 0 1 1 1 0 V2 0 1 0 0 1 0 V3 1 1 0 0 1 1 V4 0 1 1 1 0 0 V5 1

1

此时的 “1 ” 表示这两个节点有关系,“ 0”表示这两个节点无关系

我们通过邻接表来在计算机中存储图时,其邻接表存储图如下:

5.程序及测试结果

#include

#include

int visited [6];

typedef struct

{ int a[6][6];

int n;

}mgraph;

typedef struct ANode

{

int adjvex;

struct ANode *nextarc;

}ArcNode;

typedef struct Vnode

{

ArcNode *firstarc;

}VNode;

typedef VNode AdjList [6];

typedef struct

{ AdjList adjlist;

int n;

}ALGraph;

void mattolist (mgraph g,ALGraph *&G)

{ int i,j;

ArcNode *p; G=(ALGraph*)malloc(sizeof(ALGraph));

for(i=0;i

G->adjlist[i].firstarc=NULL;

for(i=0;i

for(j=g.n-1;j>=0;j--)

if(g.a[i][j]!=0)

{ p=(ArcNode*)malloc(sizeof(ArcNode)); p->adjvex=j;

p->nextarc=G->adjlist[i].firstarc;

G->adjlist[i].firstarc=p;

}

G->n=g.n;

}

void dispadj(ALGraph *G)

{ int i;

ArcNode *p;

for(i=0;in;i++)

{ p=G->adjlist[i].firstarc; printf("%d:",i);

while (p!=NULL)

{ printf("%d ",p->adjvex); p=p_>nextarc;

}

printf("\n");

}

}

void dfs (ALGraph *G,int v)

{

ArcNode *p;

visited [v]=1;

printf("%d ",v);

p=G->adjlist[v].firstarc;

while (p!=NULL)

{ if(visited[p->adjvex]==0) dfs(G,p->adjvex);

p=p->nextarc;

}

}

void bfs (ALGraph *G ,int v)

{ ArcNode *p;

int queue[6],front=0,rear=0;

int visited[6];

int w,i;

for(i=0;in;i++)

visited[i]=0;

printf("%d ",v);

visited[v]=1;

rear=(rea 叶1)%6;

queue[rear]=v;

while (front!=rear)

{ front=(front+1)%6; w=queue[front];

p=G->adjlist[w].firstarc; while(p!=NULL)

{

if(visited[p->adjvex]==0)

{

printf("%d ",p->adjvex); visited[p->adjvex]=1;

rear=(rea 叶1)%6;

queue[rear]=p->adjvex;

}

p=p_>nextarc;

}

}

printf("\n");

int main ()

{

mgraph g;

ALGraph *G;

int a[6][6]={{0,1,0,1,0,1},{1,0,1,1,1,0},{0,1,0,0,1,0},

{1,1,0,0,1,1},{0,1,1,1,0,0},{1,0,0,1,0,0}};

int i,j;

g.n=6;

for(i=0;i

for(j=0;jvg.n;j++)

g.a[i][j]=a[i][j];

for(i=0;i

{ for(j=0;j

printf("%d ",g.a[i][j]);

printf("\n");

}

printf(" -------- 邻接矩阵---------- \n");

G=(ALGraph*)malloc(sizeof(ALGraph));

mattolist(g,G);

dispadj(G);

printf(" -------- 令B接表---------- \n");

dfs(G,0);

printf("\n");

printf(" -------- 从0开始的深度优先遍历--------------- \n");

bfs(G,0);

printf("\n");

printf(" -------- 从0开始的广度优先遍历--------------- \n");

return 0;

实验日期:2016年11月17 日

图的遍历操作实验报告

. .. . .. .. 实验三、图的遍历操作 一、目的 掌握有向图和无向图的概念;掌握邻接矩阵和邻接链表建立图的存储结构;掌握DFS及BFS对图的遍历操作;了解图结构在人工智能、工程等领域的广泛应用。 二、要求 采用邻接矩阵和邻接链表作为图的存储结构,完成有向图和无向图的DFS 和BFS操作。 三、DFS和BFS 的基本思想 深度优先搜索法DFS的基本思想:从图G中某个顶点Vo出发,首先访问Vo,然后选择一个与Vo相邻且没被访问过的顶点Vi访问,再从Vi出发选择一个与Vi相邻且没被访问过的顶点Vj访问,……依次继续。如果当前被访问过的顶点的所有邻接顶点都已被访问,则回退到已被访问的顶点序列中最后一个拥有未被访问的相邻顶点的顶点W,从W出发按同样方法向前遍历。直到图中所有的顶点都被访问。 广度优先算法BFS的基本思想:从图G中某个顶点Vo出发,首先访问Vo,然后访问与Vo相邻的所有未被访问过的顶点V1,V2,……,Vt;再依次访问与V1,V2,……,Vt相邻的起且未被访问过的的所有顶点。如此继续,直到访问完图中的所有顶点。 四、示例程序 1.邻接矩阵作为存储结构的程序示例

#include"stdio.h" #include"stdlib.h" #define MaxVertexNum 100 //定义最大顶点数 typedef struct{ char vexs[MaxVertexNum]; //顶点表 int edges[MaxVertexNum][MaxVertexNum]; //邻接矩阵,可看作边表int n,e; //图中的顶点数n和边数e }MGraph; //用邻接矩阵表示的图的类型 //=========建立邻接矩阵======= void CreatMGraph(MGraph *G) { int i,j,k; char a; printf("Input VertexNum(n) and EdgesNum(e): "); scanf("%d,%d",&G->n,&G->e); //输入顶点数和边数 scanf("%c",&a); printf("Input Vertex string:"); for(i=0;in;i++) { scanf("%c",&a); G->vexs[i]=a; //读入顶点信息,建立顶点表 }

MATLAB基本操作实验报告

南昌航空大学 数学与信息科学学院 实验报告 课程名称:数学实验 实验名称: MATLAB基本操作 实验类型:验证性■综合性□ 设计性□ 实验室名称:数学实验室 班级学号: 10 学生姓名:钟 X 任课教师(教师签名): 成绩: 实验日期: 2011-10- 10

一、实验目的 1、熟悉MATLAB基本命令与操作 2、熟悉MATLAB作图的基本原理与步骤 3、学会用matlab软件做图 二、实验用仪器设备、器材或软件环境 计算机MATLAB软件 三、实验原理、方案设计、程序框图、预编程序等 问题1:在区间【0,2π】画sinx 实验程序: >> x=linspace(0,2*pi,30); >> y=sin(x); >> plot(x,y) 问题2:在【0,2π】用红线画sinx,用绿圈画cosx,实验程序:

>> x=linspace(0,2*pi,30); >> y=sin(x); >> z=cos(x); >> plot(x,y,'r',x,z,'co') >> 问题3:在【0,π】上画y=sinx的图形。 实验程序: >> ezplot('sin(x)',[0,pi]) >> 问题4:在【0,π】上画x=cos3t,y=sin3t星形图形。

实验程序: >> ezplot('cos(t).^3','sin(t).^3',[0,pi]) >> 问题5:[-2,0.5],[0,2]上画隐函数 实验程序: >> ezplot('exp(x)+sin(x*y)',[-2,0.5,0,2]) >> 问题6:在[-2,2]范围内绘制tanh的图形。实验程序: >> fplot('tanh',[-2,2])

图的遍历实现课程设计-数据结构-程序-图

数据结构课程设计 设计说明书 图的遍历的实现 学生姓名英茜 学号1118064033 班级网络1101班 成绩 指导教师申静 数学与计算机科学学院 2014年1 月4日

课程设计任务书 2013—2014学年第一学期 课程设计名称:数据结构课程设计 课程设计题目:图的遍历实现 完成期限:自2013年12月23日至2014年1月4日共 2 周 设计内容: 1. 任务说明 (1)采用邻接表存储结构创建一个图; (2)编程实现图的深度优先搜索(或广度优先搜索)遍历算法; (3) 输出遍历结果; (4) 给定具体数据调试程序。 2.要求 1)问题分析和任务定义:根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么? 2)逻辑设计:写出抽象数据类型的定义,各个主要模块的算法,并画出模块之间的调用关系图; 3)详细设计:定义相应的存储结构并写出各函数的伪码算法。 4)程序编码:把详细设计的结果进一步求精为程序设计语言程序。 5)程序调试与测试:采用自底向上,分模块进行,即先调试低层函数。 6)结果分析:程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。算法的时间、空间复杂性分析; 7)编写课程设计报告。 3. 参考资料 指导教师:申静教研室负责人:余冬梅 课程设计评阅

摘要 针对图问题中如何更好地实现图的遍历问题,以无向图为例,分别采用广度优先遍历和深度优先遍历的算法实现对各节点的遍历,以VC++为开发环境进行系统的设计和实现,其运行结果表明,系统能很好地完成遍历后节点的输出,实现了遍历的目的,系统界面友好,可操作性强。 关键词:数据结构;存储结构;邻接矩阵

图形学实验报告

山东建筑大学测绘地理信息学院 实验报告 (2016—2017学年第一学期) 课程:计算机图形学 专业:地理信息科学 班级:地信141 学生姓名:王俊凝 学号:20140113010 指

实验一直线生成算法设计 一、实验目的 掌握基本图形元素直线的生成算法,利用编程语言C分别实现直线和圆的绘制算法。 二、实验任务 在TurboC环境下开发出绘制直线和圆的程序。 三、实验仪器设备 计算机。 四、实验方法与步骤 1 运行TurboC编程环境。 2 编写Bresenham直线绘制算法的函数并进行测试。 3 编写中点圆绘制算法的函数并进行测试。 4 增加函数参数,实现直线颜色的设置。 提示: 1. 编程时可分别针对直线和圆的绘制算法,设计相应的函数,例如void drawline(…)和void drawcircle(…),直线的两个端点可作为drawline的参数,圆的圆心和半径可作为drawcircle的参数。 2. 使用C语言编写一个结构体类型用来表示一个点,结构体由两个成员构成,x和y。这样,在向函数传入参数时,可使用两个点类型来传参。定义方法为:

typedef struct{ int x; int y; }pt2; 此处,pt2就是定义的一个新的结构体数据类型,之后就可用pt2来定义其他变量,具体用法见程序模板。 3. 在main函数中,分别调用以上函数,并传入不同的参数,实现对直线的绘制。 4. 线的颜色也可作为参数传入,参数可采用TurboC语言中的预设颜色值,具体参见TurboC图形函数。 五、注意事项 1 代码要求正确运行,直线和圆的位置应当为参数,实现可配置。 2 程序提交.c源文件,函数前和关键代码中增加注释。 程序模板 #include #include typedef struct{ int x; int y; }pt2; /*declare your drawing functions.*/ void drawline(pt2 startpt,pt2 endpt,int color); void drawcircle(pt2 centerpt,int radius,int color); void circlePlotPoints(pt2 centerpt,int x,int y,int color); int main() { int color,radius;

数据结构实验报告-图的遍历

数据结构实验报告 实验:图的遍历 一、实验目的: 1、理解并掌握图的逻辑结构和物理结构——邻接矩阵、邻接表 2、掌握图的构造方法 3、掌握图的邻接矩阵、邻接表存储方式下基本操作的实现算法 4、掌握图的深度优先遍历和广度优先原理 二、实验内容: 1、输入顶点数、边数、每个顶点的值以及每一条边的信息,构造一个无向图G,并用邻接矩阵存储改图。 2、输入顶点数、边数、每个顶点的值以及每一条边的信息,构造一个无向图G,并用邻接表存储该图 3、深度优先遍历第一步中构造的图G,输出得到的节点序列 4、广度优先遍历第一部中构造的图G,输出得到的节点序列 三、实验要求: 1、无向图中的相关信息要从终端以正确的方式输入; 2、具体的输入和输出格式不限; 3、算法要具有较好的健壮性,对错误操作要做适当处理; 4、程序算法作简短的文字注释。 四、程序实现及结果: 1、邻接矩阵: #include #include #define VERTEX_MAX 30 #define MAXSIZE 20 typedef struct { int arcs[VERTEX_MAX][VERTEX_MAX] ; int vexnum,arcnum; } MGraph; void creat_MGraph1(MGraph *g) { int i,j,k; int n,m; printf("请输入顶点数和边数:"); scanf("%d%d",&n,&m); g->vexnum=n; g->arcnum=m; for (i=0;iarcs[i][j]=0;

《建筑结构试验》实验报告

《建筑结构试验》实验报告 班级: 学号: 姓名: 南昌航空大学土木工程试验中心 二○一○年四月

目录 试验一电阻应变片的粘贴及防潮技术试验二静态电阻应变仪的使用及接桥试验三电阻应变片灵敏系数的测定 试验四简支钢筋混凝土梁的破坏试验

试验一电阻应变片的粘贴及防潮技术 姓名:学号:星期第讲第组 实验日期:年月日同组者: 一、实验目的: 1.掌握电阻应变片的选用原则和方法; 2.学习常温用电阻应变片的粘贴方法及过程; 3.学会防潮层的制作; 4.认识并理解粘贴过程中涉及到的各种技术及要求对应变测试工作的影响。 二、实验仪表和器材: 1.模拟试件(小钢板); 2.常温用电阻应变片; 3.数字万用表; 4.兆欧表; 5.粘合剂:T-1型502胶,CH31双管胶(环氧树脂)或硅橡胶; 6.丙酮浸泡的棉球; 7.镊子、划针、砂纸、锉刀、刮刀、塑料薄膜、胶带纸、电烙铁、焊锡、焊锡膏等小工具; 8.接线柱、短引线 三、简述整个操作过程及注意事项: 1.分选应变片。在应变片灵敏数K相同的一批应变片中,剔除电阻丝栅有形状缺陷,片内有气泡、霉斑、锈点等缺陷的应变片,将电阻值在120±2Ω范围内的应变片选出待用。 2.试件表面处理。去除贴片位置的油污、漆层、锈迹、电镀层,用丙酮棉球将贴片处擦洗干净,至棉球洁白为止,以保证应变片能够牢固的粘贴在试件表面。 3.测点定位。应变片必须准确地粘贴在结构或试件的应变测点上,而且粘贴方向必须是要测量的应变方向。 4.应变片粘贴。注意分清应变片的正、反面,保证电阻栅的中心与十字交叉点对准。应变片贴好后,先检查有无气泡、翘曲、脱胶等现象,再用数字万用表的电阻档检查应变片有无短路、断路和阻值发生突变(因应变片粘贴不平整导致)的现象。 5.导线固定。接线柱粘帖不要离应变片太远,接线柱挂锡不可太多,导线挂锡一端的裸露线芯不能过长,以31mm为宜。引出线不要拉得太紧,以免试件受到拉力作用后,接线柱与应变片之间距离增加,使引出线先被拉断,造成断路;也不能过松,以避免两引出线互碰

图的遍历实验报告

实验四:图的遍历 题目:图及其应用——图的遍历 班级:姓名:学号:完成日期: 一.需求分析 1.问题描述:很多涉及图上操作的算法都是以图的遍历操作为基础的。试写一个程序,演示在连通的无向图上访问全部结点的操作。 2.基本要求:以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列和相应生成树的边集。 3.测试数据:教科书图7.33。暂时忽略里程,起点为北京。 4.实现提示:设图的结点不超过30个,每个结点用一个编号表示(如果一个图有n个结点,则它们的编号分别为1,2,…,n)。通过输入图的全部边输入一个图,每个边为一个数对,可以对边的输入顺序作出某种限制,注意,生成树的边是有向边,端点顺序不能颠倒。 5.选作内容: (1).借助于栈类型(自己定义和实现),用非递归算法实现深度优先遍历。 (2).以邻接表为存储结构,建立深度优先生成树和广度优先生成树,再按凹入表或树形打印生成树。 二.概要设计 1.为实现上述功能,需要有一个图的抽象数据类型。该抽象数据类型的定义为: ADT Graph { 数据对象V:V是具有相同特性的数据元素的集合,称为顶点集。 数据关系R: R={VR} VR={ | v,w v且P(v,w),表示从v到w得弧,谓词P(v,w)定义了弧的意义或信息} } ADT Graph 2.此抽象数据类型中的一些常量如下: #define TRUE 1 #define FALSE 0 #define OK 1 #define max_n 20 //最大顶点数 typedef char VertexType[20]; typedef enum{DG, DN, AG, AN} GraphKind; enum BOOL{False,True}; 3.树的结构体类型如下所示:

实验报告1windows的基本操作范例

实验名称:Windows的基本操作 一、实验目的 1.掌握桌面主题的设置。 2.掌握快捷方式的创建。 3.掌握开始菜单的组织。 4.掌握多任务间的数据传递——剪贴板的使用。 5.掌握文件夹和文件的创建、属性查看和设置。 6.掌握文件夹和文件的复制、移动和删除与恢复。 7.熟悉文件和文件夹的搜索。 8.熟悉文件和文件夹的压缩存储和解压缩。 二、实验环境 1.中文Windows 7操作系统。 三、实验内容及步骤 通过上机完成实验4、实验5所有内容后完成该实验报告 1.按“实验4--范例内容(1)”的要求设置桌面,将修改后的界面复制过来。 注:没有桌面背景图“Autumn”的,可选择其它背景图。 步骤:在桌面空白区域右击,选择菜单中的“个性化”,在弹出的窗口中点击“桌面背景”,在背景栏内选中“某一张图片”,单击“确定”。 修改后的界面如下图所示: 2.将画图程序添加到“开始”菜单的“固定项目列表”上。 步骤:右击“开始/所有程序/附件”菜单中的画图程序项,在弹出的快捷菜单中选“附到「开始」菜单”命令。 3.在D盘上建立以“自己的学号+姓名”为名的文件夹(如01108101刘琳)和其子文件 夹sub1,然后:

步骤:选定D:\为当前文件夹,选择“文件/新建/文件夹”命令,并将名字改为“学号+姓名”;选定“ D:\学号+姓名”为当前文件夹,选择“文件/新建/文件夹”命令,并将名字改为“sub1” ①在C:\WINDOWS中任选2个TXT文本文件,将它们复制到“学号+姓名”文件夹中;步骤:选定“C:\WINDOWS”为当前文件夹,随机选取2个文件, CTRL+C复制,返回“D:\学号+姓名”的文件夹,CTRL+V粘贴 ②将“学号+姓名”文件夹中的一个文件移到其子文件夹sub1中; 步骤:选定“ D:\学号+姓名”为当前文件夹,选中其中任意一个文件将其拖拽文件到subl ③在sub1文件夹中建立名为“”的空文本文档; 步骤:选定“ D:\学号+姓名\ sub1”为当前文件夹,在空白处单击右键,选择“新建\文本文档”,把名字改为test,回车完成。 ④删除文件夹sub1,然后再将其恢复。 步骤:选定“ D:\学号+姓名”为当前文件夹,右键单击“sub1”文件夹,选择“删除”,然后打开回收站,右键单击“sub1”文件夹,在弹出的快捷菜单中选择“还原”。 4.搜索C:\WINDOWS\system文件夹及其子文件夹下所有文件名第一个字母为s、文件长 度小于10KB且扩展名为exe的文件,并将它们复制到sub1文件夹中。 步骤:选定“ C:\WINDOWS\system”为当前文件夹,单击“搜索”按钮,在左侧窗格选择“所有文件和文件夹”,在“全部或部分文件名”中输入“s*.exe”,在“大小”中,选择“0~10KB”。 5.用不同的方法,在桌面上创建名为“计算器”、“画图”和“剪贴板”的三个快捷方式, 它们应用程序分别为:、和。并将三个快捷方式复制到sub1文件夹中。 步骤:①在"开始"菜单的"所有程序"子菜单中找到"计算器",单击右键,在弹出的快捷菜单中选择“发送到\桌面快捷方式”。 ②在"开始"菜单的"所有程序"子菜单中找到"画图",将其拖至桌面空白处。 ③在桌面上单击右键,在弹出的快捷菜单中选择“新建\快捷方式”,在“创建快捷方式”

数据结构图的遍历

#include"stdlib.h" #include"stdio.h" #include"malloc.h" #define INFINITY 32767 #define MAX_VERTEX_NUM 20 typedef enum{FALSE,TRUE}visited_hc; typedef enum{DG,DN,UDG,UDN}graphkind_hc; typedef struct arccell_hc {int adj; int*info; }arccell_hc,adjmatrix_hc[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct {char vexs[MAX_VERTEX_NUM]; adjmatrix_hc arcs; int vexnum,arcnum; graphkind_hc kind; }mgraph_hc; typedef struct arcnode_hc {int adjvex; struct arcnode_hc *nextarc; int*info; }arcnode_hc; typedef struct vnode_hc {char data; arcnode_hc *firstarc; }vnode_hc,adjlist_hc[MAX_VERTEX_NUM]; typedef struct {adjlist_hc vertices; int vexnum,arcnum; graphkind_hc kind; }algraph_hc; int locatevex_hc(mgraph_hc*g,char v) {int i,k=0; for(i=0;ivexnum;i++) if(g->vexs[i]==v){k=i;i=g->vexnum;} return(k);}

数据结构实验图的基本操作

浙江大学城市学院实验报告 课程名称数据结构 实验项目名称实验十三/十四图的基本操作 学生姓名专业班级学号 实验成绩指导老师(签名)日期2014/06/09 一.实验目的和要求 1、掌握图的主要存储结构。 2、学会对几种常见的图的存储结构进行基本操作。 二.实验内容 1、图的邻接矩阵定义及实现: 建立头文件test13_AdjM.h,在该文件中定义图的邻接矩阵存储结构,并编写图的初始化、建立图、输出图、输出图的每个顶点的度等基本操作实现函数。同时建立一个验证操作实现的主函数文件test13.cpp(以下图为例),编译并调试程序,直到正确运行。 2、图的邻接表的定义及实现: 建立头文件test13_AdjL.h,在该文件中定义图的邻接表存储结构,并编写图的初始化、建立图、输出图、输出图的每个顶点的度等基本操作实现函数。同时在主函数文件test13.cpp中调用这些函数进行验证(以下图为例)。

3、填写实验报告,实验报告文件取名为report13.doc。 4、上传实验报告文件report13.doc到BB。 注: 下载p256_GraphMatrix.cpp(邻接矩阵)和 p258_GraphAdjoin.cpp(邻接表)源程序,读懂程序完成空缺部分代码。 三. 函数的功能说明及算法思路 (包括每个函数的功能说明,及一些重要函数的算法实现思路) 四. 实验结果与分析 (包括运行结果截图、结果分析等)

五.心得体会

程序比较难写,但是可以通过之前的一些程序来找到一些规律 (记录实验感受、上机过程中遇到的困难及解决办法、遗留的问题、意见和建议等。) 【附录----源程序】 256: //p-255 图的存储结构以数组邻接矩阵表示, 构造图的算法。 #include #include #include #include typedef char VertexType; //顶点的名称为字符 const int MaxVertexNum=10; //图的最大顶点数 const int MaxEdgeNum=100; //边数的最大值 typedef int WeightType; //权值的类型 const WeightType MaxValue=32767; //权值的无穷大表示 typedef VertexType Vexlist[MaxVertexNum]; //顶点信息,定点名称 typedef WeightType AdjMatrix[MaxVertexNum][MaxVertexNum]; //邻接矩阵typedef enum{DG,DN,AG,AN} GraphKind; //有向图,有向网,无向图,无向网typedef struct{ Vexlist vexs; // 顶点数据元素 AdjMatrix arcs; // 二维数组作邻接矩阵 int vexnum, arcnum; // 图的当前顶点数和弧数 GraphKind kind; // 图的种类标志 } MGraph; void CreateGraph(MGraph &G, GraphKind kd)// 采用数组邻接矩阵表示法,构造图G {//构造有向网G int i,j,k,q; char v, w; G.kind=kd; //图的种类 printf("输入要构造的图的顶点数和弧数:\n"); scanf("%d,%d",&G.vexnum,&G.arcnum); getchar();//过滤回车 printf("依次输入图的顶点名称ABCD...等等:\n"); for (i=0; i

数据结构课程设计-图的遍历和构建

图(Graph)是一种复杂的非线性结构。图可以分为无向图、有向图。若将图的每条边都赋上一个权,则称这种带权图网络。在人工智能、工程、数学、物理、化学、计算机科学等领域中,图结构有着广泛的应用。在图结构中,对结点(图中常称为顶点)的前趋和后继个数都是不加以限制的,即结点之间的关系是任意的。图中任意两个结点之间都可能相关。图有两种常用的存储表示方法:邻接矩阵表示法和邻接表表示法。在一个图中,邻接矩阵表示是唯一的,但邻接表表示不唯一。在表示的过程中还可以实现图的遍历(深度优先遍历和广度优先遍历)及求图中顶点的度。当然对于图的广度优先遍历还利用了队列的五种基本运算(置空队列、进队、出队、取队头元素、判队空)来实现。这不仅让我们巩固了之前学的队列的基本操作,还懂得了将算法相互融合和运用。

第一章课程设计目的 (3) 第二章课程设计内容和要求 (3) 2.1课程设计内容 (3) 2.1.1图的邻接矩阵的建立与输出 (3) 2.1.2图的邻接表的建立与输出 (3) 2.1.3图的遍历的实现 (4) 2.1.4 图的顶点的度 (4) 2.2 运行环境 (4) 第三章课程设计分析 (4) 3.1图的存储 (4) 3.1.1 图的邻接矩阵存储表示 (4) 3.1.2 图的邻接表存储表示 (5) 3.2 图的遍历 (5) 3.2.1 图的深度优先遍历 (5) 3.2.2 图的广度优先遍历 (6) 3.3图的顶点的度 (7) 第四章算法(数据结构)描述 (7) 4.1 图的存储结构的建立。 (7) 4.1.1 定义邻接矩阵的定义类型 (7) 4.1.2定义邻接表的边结点类型以及邻接表类型 (7) 4.1.3初始化图的邻接矩阵 (8) 4.1.4 初始化图的邻接表 (8) 4.2 图的遍历 (8) 4.2.1 深度优先遍历图 (8) 4.2.2 广度优先遍历图 (9) 4.3 main函数 (9) 4.4 图的大致流程表 (10) 第五章源代码 (10) 第六章测试结果 (20) 第七章思想总结 (21) 第八章参考文献 (22)

数据结构实验报告图实验

邻接矩阵的实现 1. 实验目的 (1)掌握图的逻辑结构 (2)掌握图的邻接矩阵的存储结构 (3)验证图的邻接矩阵存储及其遍历操作的实现2. 实验内容 (1)建立无向图的邻接矩阵存储 (2)进行深度优先遍历 (3)进行广度优先遍历3.设计与编码MGraph.h #ifndef MGraph_H #define MGraph_H const int MaxSize = 10; template class MGraph { public: MGraph(DataType a[], int n, int e); ~MGraph(){ void DFSTraverse(int v); void BFSTraverse(int v); private: DataType vertex[MaxSize]; int arc[MaxSize][MaxSize]; }

int vertexNum, arcNum; }; #endif MGraph.cpp #include using namespace std; #include "MGraph.h" extern int visited[MaxSize]; template MGraph::MGraph(DataType a[], int n, int e) { int i, j, k; vertexNum = n, arcNum = e; for(i = 0; i < vertexNum; i++) vertex[i] = a[i]; for(i = 0;i < vertexNum; i++) for(j = 0; j < vertexNum; j++) arc[i][j] = 0; for(k = 0; k < arcNum; k++) { cout << "Please enter two vertexs number of edge: " cin >> i >> j; arc[i][j] = 1; arc[j][i] = 1; } }

数字图像处理实验报告

目录 实验一:数字图像的基本处理操作 (4) :实验目的 (4) :实验任务和要求 (4) :实验步骤和结果 (5) :结果分析 (8) 实验二:图像的灰度变换和直方图变换 (9) :实验目的 (9) :实验任务和要求 (9) :实验步骤和结果 (9) :结果分析 (13) 实验三:图像的平滑处理 (14) :实验目的 (14) :实验任务和要求 (14) :实验步骤和结果 (14) :结果分析 (18) 实验四:图像的锐化处理 (19) :实验目的 (19) :实验任务和要求 (19) :实验步骤和结果 (19) :结果分析 (21)

实验一:数字图像的基本处理操作 :实验目的 1、熟悉并掌握MATLAB、PHOTOSHOP等工具的使用; 2、实现图像的读取、显示、代数运算和简单变换。 3、熟悉及掌握图像的傅里叶变换原理及性质,实现图像的傅里叶变换。:实验任务和要求 1.读入一幅RGB图像,变换为灰度图像和二值图像,并在同一个窗口内分 成三个子窗口来分别显示RGB图像和灰度图像,注上文字标题。 2.对两幅不同图像执行加、减、乘、除操作,在同一个窗口内分成五个子窗口来分 别显示,注上文字标题。 3.对一幅图像进行平移,显示原始图像与处理后图像,分别对其进行傅里叶变换, 显示变换后结果,分析原图的傅里叶谱与平移后傅里叶频谱的对应关系。 4.对一幅图像进行旋转,显示原始图像与处理后图像,分别对其进行傅里 叶变换,显示变换后结果,分析原图的傅里叶谱与旋转后傅里叶频谱的 对应关系。 :实验步骤和结果 1.对实验任务1的实现代码如下: a=imread('d:\'); i=rgb2gray(a); I=im2bw(a,; subplot(1,3,1);imshow(a);title('原图像'); subplot(1,3,2);imshow(i);title('灰度图像'); subplot(1,3,3);imshow(I);title('二值图像'); subplot(1,3,1);imshow(a);title('原图像'); 结果如图所示:

数据结构课程设计之图的遍历和生成树求解

##大学 数据结构课程设计报告题目:图的遍历和生成树求解 院(系):计算机工程学院 学生: 班级:学号: 起迄日期: 2011.6.20 指导教师:

2010—2011年度第 2 学期 一、需求分析 1.问题描述: 图的遍历和生成树求解实现 图是一种较线性表和树更为复杂的数据结构。在线性表中,数据元素之间仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继;在树形结构中,数据元素之间有着明显的层次关系,并且每一层上的数据元素可能和下一层中多个元素(及其孩子结点)相关但只能和上一层中一个元素(即双亲结点)相关;而在图形结构中,节点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。 生成树求解主要利用普利姆和克雷斯特算法求解最小生成树,只有强连通图才有生成树。 2.基本功能 1) 先任意创建一个图; 2) 图的DFS,BFS的递归和非递归算法的实现 3) 最小生成树(两个算法)的实现,求连通分量的实现 4) 要求用邻接矩阵、邻接表等多种结构存储实现 3.输入输出

输入数据类型为整型和字符型,输出为整型和字符 二、概要设计 1.设计思路: a.图的邻接矩阵存储:根据所建无向图的结点数n,建立n*n的矩阵,其中元素全是无穷大(int_max),再将边的信息存到数组中。其中无权图的边用1表示,无边用0表示;有全图的边为权值表示,无边用∞表示。 b.图的邻接表存储:将信息通过邻接矩阵转换到邻接表中,即将邻接矩阵的每一行都转成链表的形式将有边的结点进行存储。 c.图的广度优先遍历:假设从图中的某个顶点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点,然后再访问此邻接点的未被访问的邻接点,并使“先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”被访问,直至图中所有已被访问的顶点的邻接点都被访问到。若此时图中还有未被访问的,则另选未被访问的重复以上步骤,是一个非递归过程。 d.图的深度优先遍历:假设从图中某顶点v出发,依依次访问v的邻接顶点,然后再继续访问这个邻接点的系一个邻接点,如此重复,直至所有的点都被访问,这是个递归的过程。 e.图的连通分量:这是对一个非强连通图的遍历,从多个结点出发进行搜索,而每一次从一个新的起始点出发进行搜索过程中得到的顶点访问序列恰为其连通分量的顶点集。本程序利用的图的深度优先遍历算法。 2.数据结构设计: ADT Queue{ 数据对象:D={a i | a i ∈ElemSet,i=1,2,3……,n,n≥0} 数据关系:R1={| a i-1 ,a i ∈D,i=1,2,3,……,n} 基本操作: InitQueue(&Q) 操作结果:构造一个空队列Q。 QueueEmpty(Q) 初始条件:Q为非空队列。 操作结果:若Q为空队列,则返回真,否则为假。 EnQueue(&Q,e) 初始条件:Q为非空队列。 操作结果:插入元素e为Q的新的队尾元素。 DeQueue(&Q,e) 初始条件:Q为非空队列。 操作结果:删除Q的队头元素,并用e返回其值。}ADT Queue

工程结构试验与检测实验报告

实验一静态应变测量原理 在电阻应测量中,如在电桥中仅接入一个电阻应变片,则实际测量值中含有由于温度变化时构件产生的应变,这是实验中所不希望的,通过适当的接线方式,可消除温度的影响,在课本中有许多不同的接线方式,主要分为两大类,一是设置专门温度补偿片,这种方式又可分为公共补偿与单片补偿两种,二是通过工作片间互相补偿,称为互相补偿或自补偿,接线要有一定的技巧。掌握电阻应变测量中的温度补偿方式及不同接线方式的测量结果的区别是很重要的。 一、实验目的 1、熟悉电阻应变仪的操作规程; 2、掌握电阻应变仪测量的基本原理; 3、学会用电阻应变片作半桥测量的方法; 4、掌握温度补偿的基本原理。 二、实验设备及仪表 1、DH3819型静态电阻应变仪; 2、等强度梁; 3、电阻应变片,导线。 三、实验内容 进行两种电阻应变测量接线方法的实验,掌握电阻应变测量的不同接线基本原理,以及消除温度影响的方法,根据实验结果分析两种接线不同测量数值理论依据。 四、试验方法 1、1/4桥接线+公共补偿:

单片补偿接线方法:将应变片R1接于应变仪1组,Eg、接线柱,温度补偿片R2接于、0接线柱,则构成外半桥,另内半桥由应变仪内部两个标准电阻构成。输入应变片灵敏度系数,导线电阻,应变片电阻。 公共补偿接线方法:断开补偿组的连线,将公共补偿接线连接于该组,将等强度梁的上侧应变片R1接于1组的Eg、接线柱,将等强度梁下侧应变片R3接、0接线柱。 2、半桥接线 按应变仪的设计原理更换公共补偿端的接线方式,然后在每个测量桥路中接入两个电阻应变片。本试验中,在一个测量桥路中按半桥方式接入等强度梁的上下测应变片。 五、实验步骤 1、接上述接桥方法分别接通桥路; 2、将电阻应变仪调平衡; 3、作预加载1公斤,检查仪表和装置; 4、正式试验,每级加载1公斤,加三级,记取读数,重复三次。 六、试验报告 1、实验方案; 2、实验过程; 3、整理出实验数据,试验数据填入应变记录表。(表格见下表) 4、比较两种接线方法,分析原因,给出结论。 5、写出试验操作方法和体会。 6、回答后面的思考题。

数字图像处理实验报告

目录 实验一:数字图像的基本处理操作....................................................................... 错误!未定义书签。:实验目的 .............................................................................................................. 错误!未定义书签。:实验任务和要求..................................................................................................... 错误!未定义书签。:实验步骤和结果..................................................................................................... 错误!未定义书签。:结果分析................................................................................................................. 错误!未定义书签。实验二:图像的灰度变换和直方图变换............................................................... 错误!未定义书签。:实验目的 .............................................................................................................. 错误!未定义书签。:实验任务和要求..................................................................................................... 错误!未定义书签。:实验步骤和结果..................................................................................................... 错误!未定义书签。:结果分析................................................................................................................. 错误!未定义书签。实验三:图像的平滑处理....................................................................................... 错误!未定义书签。:实验目的 .............................................................................................................. 错误!未定义书签。:实验任务和要求..................................................................................................... 错误!未定义书签。:实验步骤和结果..................................................................................................... 错误!未定义书签。:结果分析................................................................................................................. 错误!未定义书签。实验四:图像的锐化处理......................................................................................... 错误!未定义书签。:实验目的 .............................................................................................................. 错误!未定义书签。:实验任务和要求..................................................................................................... 错误!未定义书签。:实验步骤和结果..................................................................................................... 错误!未定义书签。:结果分析................................................................................................................. 错误!未定义书签。

图的遍历数据结构实验研究报告

南昌航空大学实验报告 课程名称:数据结构实验名称:实验八图地遍历 班级:学生姓名:学号: 指导教师评定:签名: 题目:假设无向图采用邻接表结构表示.编程分别实现图地深度优先搜索算法和广度优先搜索算法. 一、需求分析 1.用户可以根据自己地需求分别输入任意地一个有向图(可以是非连通图也可以是连通 图). 2.通过用广度优先遍历和深度优先遍历已有地图,并输出. 3.并且以邻接表地形式输出该已有地图. 4.程序执行地命令包括: (1)输入图地结点和弧构造图(2)输出图(2)广度优先遍历图(3)深度优先遍历图 二、概要设计 ⒈为实现上述算法,需要链表地抽象数据类型: ADT Graph { 数据对象V:V是具有相同特征地数据元素地集合,称为顶点集. 数据关系R: R={VR} VR={|v,w∈V且P(v,w),表示从x到w地弧,谓词P(v,w)定义了弧 地意义或信息 }b5E2R。 基本操作P: Creatgraph(&G,V,VR) 初始条件:V是图地顶点集,VR是图中弧地集合. 操作结果:按V和VR地定义构造图G. destroygraph(&G) 初始条件:图G存在. 操作结果:销毁图G. displaygraph(G) 初始条件:图G存在. 操作结果:显示图G. locatevex(G,u) 初始条件:图G存在,u和G中地顶点有相同地特征. 操作结果:若G中存在顶点u,则返回该顶点在图中位置,否则返回 其他信息.

getvex(G,v) 初始条件:图G存在,v是G中地某个顶点. 操作结果:返回v地值. DFStraverse (G) 初始条件:图G存在. 操作结果:对图进行深度优先遍历.在遍历过程中对每个顶点访问一 次. BFStraverse (&S,e) 初始条件:图G存在. 操作结果:对图进行广度优先遍历.在遍历过程中对每个顶点访问一 次. }ADT Graph 2. 本程序有三个模块: ⑴主程序模块 main(){ 初始化; { 接受命令; 显示结果; } } ⑵创建图地模块:主要建立一个图; ⑶广度优先遍历和深度优先遍历模块:输出这两种遍历地结果; (4)输出图模块:显示已创建地图. 三、详细设计 ⒈元素类型,结点类型 struct arcnode { int adjvex; /*该弧所指向地顶点地位置*/ int info; struct arcnode *nextarc; /*指向下一条弧地指针*/ }; struct vexnode { int data; /*顶点地信息*/ struct arcnode *firstarc; /*指向第一条依附该顶点地弧地指针*/ }; struct graph { struct vexnode *vexpex; int vexnum,arcnum; /*图地当前地顶点数和弧数*/ }; /*定义队列*/ struct queue { int *elem;

相关文档
最新文档