搜档网
当前位置:搜档网 › 数据结构图及其应用实验报告+代码

数据结构图及其应用实验报告+代码

数据结构图及其应用实验报告+代码
数据结构图及其应用实验报告+代码

附件2:

北京理工大学珠海学院实验报告

ZHUHAI CAMPAUS OF BEIJING INSTITUTE OF TECHNOLOGY 实验题目图及其应用实验时间 2011.5.10

一、实验目的、意义

(1)熟悉图的邻接矩阵(或邻接表)的表示方法;

(2)掌握建立图的邻接矩阵(或邻接表)算法;

(3)掌握图的基本运算,熟悉对图遍历算法;

(4)加深对图的理解,逐步培养解决实际问题的编程能力

二、实验内容及要求

说明1:学生在上机实验时,需要自己设计出所涉及到的函数,同时设计多组输入数据并编写主程序分别调用这些函数,调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。

具体要求:

(1)建立图的邻接矩阵(或邻接表);

(2)对其进行深度优先及广度优先遍历。

三、实验所涉及的知识点

1.创建一个图: CreateUDN(MGraph &G)

2.查找v顶点的第一个邻接点: FirstAdjVex(MGraph G,int v)

3. 查找基于v顶点的w邻接点的下一个邻接点: NextAdjVex(MGraph G,int v,int w)

4.图的矩阵输出: printArcs(MGraph G)

5:顶点定位: LocateVex(MGraph G,char v)

6. 访问顶点v输出: printAdjVex(MGraph G,int v)

7. 深度优先遍历: DFSTraverse(MGraph G,Status (*Visit)(MGraph G,int v))

8. 广度优先遍历BFSTraverse(MGraph G,Status (*Visit)(MGraph G,int v))

9. DFS,从第v个顶点出发递归深度优先遍历图G: DFS(MGraph G,int v)

四、实验记录

1.对顶点的定位其数组下标,利用了找到之后用return立即返回,在当图顶点

多的情况下节省了搜索时间,程序如下

//对顶点v定位,返回该顶点在数组的下标索引,若找不到则返回-1

int LocateVex(MGraph G,char v){

for (int i=0;i

{

if(v == G.vexs[i])

return i;

}

return -1;

}

2,定义里一个全局的函数指针变量,同时在深度优先遍历中加入一个函数指针参,调用时,将传如的函数赋值给全局的函数指针,这样在之后循环调用DFS的时候就不用将函数传给DFS函数了,程序如下:

//深度优先遍历

void DFSTraverse(MGraph G,Status (*Visit)(MGraph G,int v)){

//将函数复制给全局的函数指针变量,待调用DFS时使用

VisitFunc = Visit;

int v;

//将访问标记初始化为false

for (v=0;v

visited[v] = false;

for (v=0;v

//对尚未访问即访问标记为false的顶点调用DFS

if (!visited[v]) DFS(G,v);

}

五、实验结果及分析

预备输入的图结构如下:

顶点为:a,b,c,d,e

弧及其权值为:a,b,2 a,c,3 b,d,4 b,e,2 d,e,1

结果如下:

1.图的创建,先输入顶点个数与边数,如图 4.1.1,接着输入各顶点的值,如图4.1.2,最后输入三条边依附的顶点以及权值,当输入的顶点不在图中时,会提示重新输入,如图4.1.3

图4.1.1

图4.1.2

图4.1.3

2.图的矩阵输出,如图4.2

图4.2

3.深度优先遍历图,输出序列,如图

4.3

图4.3

4.广度优先遍历图,输出序列,如图4.4

图4.4

六、总结与体会

图,是一种较线性表和树更为复杂的数据结构将其用深度遍历后,可以变成一棵树,或者一个森林。和树的遍历相类似,都利用了递归的方法,逐个搜索输出。用邻接矩阵表示图,形象地体现出顶点与顶点之间的紧密关系。

七、程序清单(包含注释)

#include "stdio.h"

#include "limits.h" //INT_MAX头文件

#include "windows.h" //boolean头文件

#define INFINITY INT_MAX

#define MAX_VERTEX_NUM 20

#define OVERFLOW -1

#define OK 1

#define ERROR 0

typedef int Status;

typedef enum {DG,DN,UDG,UDN} GraphKind;

typedef int VRType;

typedef char VertexType;

typedef char* InfoType;

typedef int QElemType;

//边信息

typedef struct ArcCell{

VRType adj; //1或0表示是否邻接,对带权图,则为权值类型InfoType *info;

}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];

//图结构

typedef struct {

VertexType vexs[MAX_VERTEX_NUM]; //定点向量

AdjMatrix arcs; //邻接矩阵,为一二维数组int vexnum,arcnum; //图的当前顶点数和弧数

GraphKind kind; //图的种类标志

}MGraph;

//辅助队列

typedef struct QNode{

QElemType data; //数值域

struct QNode *next; //指针域

}QNode, *QueuePtr;

typedef struct{

QueuePtr front; //队头

QueuePtr rear; //队尾

}LinkQueue;

//初始化队列

Status InitQueue(LinkQueue &Q){

Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));

if (!Q.front){

printf("内存分配失败!");

exit(OVERFLOW);

}

Q.front->next = NULL;

return OK;

}

//插入元素到队尾

Status EnQueue(LinkQueue &Q,QElemType e){

QueuePtr p = (QueuePtr)malloc(sizeof(QNode));

if (!p)

{

printf("\n内存分配失败!");

exit(OVERFLOW);

}

p->data = e;

p->next = NULL;

Q.rear->next = p;

Q.rear = p;

return OK;

}

//队列判空

Status QueueEmpty(LinkQueue Q){

return Q.front == Q.rear;

}

//销毁队列

Status DestroyQueue(LinkQueue &Q){

while (Q.front)

{

Q.rear = Q.front->next;

free(Q.front);

Q.front = Q.rear;

}

return OK;

}

//删除队头元素

Status DeQueue(LinkQueue &Q,QElemType &e){

if (QueueEmpty(Q))

{

printf("\n队列为空!");

return ERROR;

}

QueuePtr p = Q.front->next;

e = p->data;

Q.front->next = p->next;

if(Q.rear==p) Q.rear = Q.front;

free(p);

return OK;

}

//对顶点v定位,返回该顶点在数组的下标索引,若找不到则返回-1 int LocateVex(MGraph G,char v){

for (int i=0;i

{

if(v == G.vexs[i])

return i;

}

return -1;

}

//create a graph

Status CreateUDN(MGraph &G){

G.kind = UDN;

printf("输入顶点个数和边数(如:4,3):");

scanf("%d,%d",&G.vexnum,&G.arcnum);

//判断是否超过顶点最大个数

while(G.vexnum>MAX_VERTEX_NUM)

{

printf("最大顶点为20,重新输入(如:4,3):");

scanf("%d,%d",&G.vexnum,&G.arcnum);

}

printf("\n依次输入顶点向量值\n");

int i;

for (i=0;i

//清空缓冲区

fflush(stdin);

printf("第%d个:",i+1);

scanf("%c",&G.vexs[i]);

}

//初始化邻接矩阵

for (i=0;i

{

for (int j=0;j

{

G.arcs[i][j].adj = INFINITY;

G.arcs[i][j].info = NULL;

}

}

char front,rear;

int values;

printf("\n输入依附两个顶点的边及其权值<如,a,b,1>\n");

for(i=0;i

printf("第%d条:",i+1);

//清空缓冲区

fflush(stdin);

scanf("%c,%c,%d",&rear,&front,&values);

int m,n;

//定位两顶点在vexs数组中的索引

m = LocateVex(G,rear);

n = LocateVex(G,front);

if(m==-1||n==-1){

printf("输入顶点或不在此图中,请重新输入!\n");

i--;

continue;

}

//赋予对应矩阵位置的权值,以及对称弧的权值

G.arcs[m][n].adj = values;

G.arcs[n][m].adj = values;

}

return OK;

} //CreateUDG

//矩阵输出

void printArcs(MGraph G){

int i;

printf(" ");

//输出第一行的顶点向量

for (i=0;i

{

printf(" %c",G.vexs[i]);

}

for (i=0;i

{

printf("\n\n%c",G.vexs[i]);

for (int j=0;j

{

if(G.arcs[i][j].adj==INFINITY)

printf(" ∞");

else

printf(" %d",G.arcs[i][j].adj);

}

}

printf("\n");

}

//访问顶点v输出

Status printAdjVex(MGraph G,int v){

printf("%c ",G.vexs[v]);

return OK;

}

//查找v顶点的第一个邻接点

Status FirstAdjVex(MGraph G,int v){

//查找与顶点v的第一个邻接点,找到后立即返回其索引,若找不到,则返回-1 for (int i=1;i

{

if(G.arcs[v][i].adj!=INFINITY)

return i;

}

return -1;

}

//查找基于v顶点的w邻接点的下一个邻接点

Status NextAdjVex(MGraph G,int v,int w){

//查找基于顶点v的w邻接点的下一个邻接点,找到之后立即返回其索引,若找不到,则返回-1

for (int i=w+1;i

{

if (G.arcs[v][i].adj!=INFINITY)

return i;

}

return -1;

}

//创建访问标志全局变量

boolean visited[MAX_VERTEX_NUM];

//函数指针变量

Status (* VisitFunc)(MGraph G,int v);

//DFS,从第v个顶点出发递归深度优先遍历图G

void DFS(MGraph G,int v){

visited[v] = TRUE;

//访问第v个顶点

VisitFunc(G,v);

for (int w=FirstAdjVex(G,v);w>=0;w=NextAdjVex(G,v,w))

{

if (!visited[w])

DFS(G,w);

}

}

//深度优先遍历

void DFSTraverse(MGraph G,Status (*Visit)(MGraph G,int v)){

//将函数复制给全局的函数指针变量,待调用DFS时使用

VisitFunc = Visit;

int v;

//将访问标记初始化为false

for (v=0;v

visited[v] = false;

for (v=0;v

//对尚未访问即访问标记为false的顶点调用DFS

if (!visited[v]) DFS(G,v);

}

//广度优先遍历

void BFSTraverse(MGraph G,Status (*Visit)(MGraph G,int v)){

//按广度优先非递归遍历图G,使用辅助队列Q和访问标志数组Visited

int v;

int u;

//将访问标记数组初始化为false

for (v = 0;v

visited[v] = FALSE;

//创建辅助队列Q

LinkQueue Q;

InitQueue(Q);

for (v = 0;v

//判断顶点V是否被访问

if (!visited[v])

{

//将第一次访问的顶点对应的访问标记数组位置赋值为TRUE

visited[v] = TRUE;

//输出顶点v

Visit(G,v);

EnQueue(Q,v);

while (!QueueEmpty(Q))

{

//按入队序列取出顶点,便于查找此顶点的邻接点

DeQueue(Q,u);

//查找当前顶点邻接点

for (int w=FirstAdjVex(G,u);w>=0;w = NextAdjVex(G,u,w))

if (!visited[w])

{

visited[w] =TRUE;

Visit(G,w);

EnQueue(Q,w);

}

}

}

//销毁队列

DestroyQueue(Q);

}

void main(){

printf("====图的创建及其应用====\n");

//创建一个图

MGraph G;

CreateUDN(G);

//用邻接矩阵输出图

printf("\n图的邻接矩阵输出如下:\n");

printArcs(G);

//深度优先遍历

printf("\n深度优先遍历序列:\n");

DFSTraverse(G,printAdjVex);

printf("\n");

//广度优先遍历

printf("\n广度优先遍历序列:\n");

BFSTraverse(G,printAdjVex);

printf("\n"); }

图形学实验报告

山东建筑大学测绘地理信息学院 实验报告 (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)功能分析 经过初步分析“人事管理系统”应该具备以下主要功能。 1、职员个人信息资料的增加、修改和删除; 2、职员的考勤录入和查询; 3、职员工资结算和查询; 4、人事管理人员的变化和操作授权; 由于是使用计算机管理,就带来了新的功能:用户登陆、操作人员的管理、基本数据的维护、由数据安全产生的数据备份与恢复。 (2)、关系模式 在满足函数依赖和无损连接的基础上,使数据的设计更加合理。在本系统中只有3个实体,那就是普通员工、管理员、超级管理员,他们权限的不听通过角色来区分。在整个系统中超级管理员只有一人,管理员二人。一个人只可以在普通员工、管理员、超级管理员中处于一个角色,而不可以兼任。其具体的关系模式如下: 普通员工(员工号,密码,姓名,性别,出生年月,身份证号,联系电话,就职时间) 管理员(管理员号,密码,姓名,性别,出生年月,身份证号,联系电话,就职时间) 超级管理员(超级管理员号,密码,姓名,性别,出生年月,身份证号,联系电话,就职时间) 工资(员工号,时间,基本工资,提成,奖金) 考勤(员工号,时间,迟到,早退,管理员号) 注意:“”表示主码,“”表示既是主码又是外码。 E-R图如下所示

数据字典设计: 为了方便数据库的管理和维护,本系统只设计一个数据库workers.mdb,其中包含worker(员工信息表)、manager(考勤信息表)、booklist(工资信息表) 表1-1 worker(员工信息表)各字段设计 表1-2 monit (考勤信息表)各字段设计

数据结构应用设计设计报告

数据结构应用设计设计报告题目名称:___基于哈夫曼编码的文件压缩器_ 设计环境:____ __VC6.0 ____________ 指导教师:_____ _蔡茂蓉______________ 专业班级:______软件工程0601班__ ___ 姓名:__ _ __杨文辉_____________ 学号:___ ____ _____ 联系电话:_ _ 电子邮件: 设计日期:年月日至年月日 设计报告日期:年月日

1 .题目................................................................................................... 错误!未定义书签。 2 .需求分析........................................................................................... 错误!未定义书签。 2.1文件压缩过程:......................................................................... 错误!未定义书签。 2.2文件解压过程:......................................................................... 错误!未定义书签。 2.3压缩文件的存储结构设计图:................................................. 错误!未定义书签。 2.4HAF文件示例:...................................................................... 错误!未定义书签。 3 .详细设计........................................................................................... 错误!未定义书签。 3.1压缩流程图:............................................................................. 错误!未定义书签。 3.2解压流程图:............................................................................. 错误!未定义书签。 3.3节点类设计:............................................................................. 错误!未定义书签。 3.4编码和译码时的控制结构的实现............................................. 错误!未定义书签。 4.调试分析........................................................................................... 错误!未定义书签。 6 .测试结果........................................................................................... 错误!未定义书签。 6.1文件压缩..................................................................................... 错误!未定义书签。 6.2文件解压..................................................................................... 错误!未定义书签。 7.实验总结........................................................................................... 错误!未定义书签。 8 .参考文献........................................................................................... 错误!未定义书签。

一步测量测站实验

数字测图实验报告 班级2013012班 专业地理信息科学 组别第六组 组员王宁 华北水利水电大学资源与环境学院地理信息科学教研室

数字测图实验报告一 [实验名称] 一步测量测站实验 [实验目的] 1 对图根控制测量少设一次站,少跑一遍路,提高外业效率 2 进行内业导线平差处理的时候,如果误差超限,不需要全部重新测量,只需要在错误处重新架仪器进行测量,提高工作效率。 [仪器和工具] 外业;全站仪、尺子、标尺、棱镜 内业:CASS软件 [实验原理] 一步测量法"即在图根导线选点、埋桩以后,图根导线测量和碎部测量同步进行。一步测量法"对图根控制测量少设一次站,少跑一遍路,提高外业效率是明显的。如果导线闭合差超限,只需重测导线错误处,用正确的导线点坐标,进行坐标改正,可以通过坐标的旋转。平移进行改正,然后对本站所测的全部碎部点重算就可重新绘图,因而在数字测图中采用"一步测量法"是合适的。 [实验步骤] (一外业工作) 1. 在一个已知控制点架仪器,对中,调平,并记录仪器高和棱镜高。 2.找到一个已知坐标的控制点,当做定点2,并且把定点2的坐标输入进仪器中记录下来。在已知点的后方再选择一个已知控制点作为定向点1,把棱镜立在1处,记录棱镜高。在2处后视1,把数据记录下来。以1 2为定向边。

3. 先选好两个图根点3和4,以便进行闭合导线测量。把棱镜立在一个图根点3处,在2处前视图根点3,把所有数据记录下来以便内业计算。 4. 把仪器搬到图根点3处,对中调平并且记录仪器高。 5. 分别把棱镜立在原点2处和图根点4处,后视2,前视图根点4,记录所有数据。另外,在3点测量几个碎步点,也把数据记录下来。 6. 把仪器立在图根点4处,对中调平,记录仪器高。 7.分别把棱镜立在图根点3处和原控制点2处,,后视图根点3,前视原点2,记录所有数据。在4点测量几个碎步点坐标,并记录数据。 8. 此时记录出来的2点坐标就可以和已知2点坐标作对比,进行内业导线平差处理。 4 3 定向边 2 1 (二)内业处理 1. 对所有已经记录的数据进行编号,并把它们输入到记事本中,把后缀名更改为.dat格式,以便在CASS中展绘。

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

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

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

试验一电阻应变片的粘贴及防潮技术 姓名:学号:星期第讲第组 实验日期:年月日同组者: 一、实验目的: 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、学习编制可行性研究报告。 二、实验要求 硬件:Intel Pentium 120 或以上级别的CPU,大于16MB的内存。 软件:Win dows 95/98/2000 操作系统,Office 97/2000 软件 学时:2学时 写岀此项实验报告 三、实验内容 1、可行性研究(结构化分析)方法; 2、绘制数据流图,使用Word写实验报告。 四、实验步骤 1 ?引言 1.1 编写目的 可行性研究的目的是为了对问题进行研究,以最小的代价在最短的时间内确定问题是否可解。 经过对此项目进行详细调查研究,初拟系统实现报告,对软件开发中将要面临的问题及其解决方案进行初步设计及合理安排。明确开发风险及其所带来的经济效益。本报告经审核后,交软件经理审查。 1 . 2 项目背景 (1 )待开发的软件产品名称:旅行社机票预定系统。 (2)本项目的提岀者:冯剑。开发者:李翀。用户:旅行社 (3)本软件产品将用于旅行社的机票预定和费用的记录。

1 . 3术语说明 DFD (数据流图):一种描述书记变换的图形工具,是结构化分析方法最普遍采用的表示手段,但数据流图并不是结构化分析模型的全部,数据字典和小说明为数据流图提供了补充,并用以验证图形表示的正确性、一致性和完整性,三者共同构成了被建系统的模型。 1 . 4.系统参考文献 参考文献见附录 2?可行性研究的前提 2.1基本要求 ⑴功能 本软件实现的功能有:为游客提供机票预定服务,提高旅游局的服务质量和服务效率。 对航班数据库的查询和修改,对机票费用记帐数据库的查询和修改,记录旅客信息(姓名、性别、年龄、身份证号、单位、旅行时间、目的地)、航班时间和班次,打印机票和帐单。 (2) 性能 时间:提供的信息必须及时的反映在工作平台上。售票系统的定单必须无差错的存 储在机场的主服务器上。对服务器上的数据必须进行及时正确的刷新。一笔业务在一分钟内完成。空间:运行空间 2M。 (3) 系统的输入和输岀 输入:旅行社定票单。数据完整,详实。 输岀:机票、帐单。简捷,快速,实时。 (4) 处理流程 旅行社将定票信息输入定票系统,系统输岀机票和帐单给旅客。 5 )安全保密要求

数据结构图的应用报告

数据结构课程设计图的应用个人报告 1979:Red and Black 第一、题目理解 有一个长方形的房间,覆盖平方米瓷砖。每一层的颜色或是红色或黑色。一名男子正站在一个黑色的瓷砖。从瓷砖,他可以转移到四个相邻瓷砖。但是他不能进入红色瓷砖,他只能移动黑砖。写程序的数量黑色瓦片,他可以达到通过重复上述动作。 题目要求只能走黑格子而不能走红格子,从其中一块黑格子开始求出可以到达的黑格子数。 第二、算法思想 用图的深度优先遍历可以解决问题,从开始的位置探索四个方向的格子,用递归直到走完所有黑格子。 建图结构,图的每一个顶点表示瓦片,如果两个相邻顶点都表示黑瓦,则在两个顶点间连线,表示可以从一片黑瓦移到另一片上;对建好的图从给定的起始点开始调用深度优先遍历算法,能访问几个顶点表示重复移动能达到的黑瓦的数目. 第三、如何实现 用一个二维数组来表示房间格子的分布。用变量count来记录可行黑格子的个数。用深度优先遍历算法来遍历整个二维数组。 search(int k,int t){ // Search函数,递归调用. if(k>=0 && k=0 && t

1915: Knight Moves 第一、题目理解 题目要求要计算国际象棋中骑士从一个指定位置到目的位置的最少步数。因为每一次都有八种走法,要把可行的走法记录下来,直到走到终点为止。输出最少的步数。 第二、算法思想 此问题可利用广度优先遍历算法,用一个数组来记录可行的走法,然后再用另一个数组来记录数组中的每一种情况的可行走法,重复以上步骤,当终点出现在第n数组中则结束。数组的数量n就是最小的步数。 第三、如何实现 数据结构: typedef struct { //定义顶点的结构 int x, y; int direction; }VRType; typedef struct { int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; int length; }MGraph; typedef VRType QElemType; //队列定义 #define MAXQSIZE 1000 typedef struct { QElemType *base; int front; int rear; }SqQueue;

机构运动简图的测绘实验报告doc

机构运动简图的测绘实验报告 篇一:机构运动简图的测绘和分析试验报告 实验一机构运动简图的测绘和分析 一. 实验目的 1. 学会根据各种机械实物或模型,绘制机构运动简图; 2. 分析和验证机构自由度,进一步理解机构自由度的概念,掌握机构自由度的计算方法; 3. 加深对机构结构分析的了解。 二. 设备和工具 1. 各类典型机械的实物(如:缝纫机等) 2. 各类典型机械的模型(如:内燃机模型、牛头刨床等); 3. 钢皮尺,内外卡钳,量角器(根据需要选用); 4. 三角板,铅笔,橡皮,稿纸(自备)。 三. 原理和方法 1. 原理 由于机构和运动仅与机构中所有的构件的数目的构件所组成的运动副的数目、类型、相对位置有关,因此,在绘制机构运动简图时,可以撇开构件的形状和运动副的具体构造,而用一些简略的符号(如教科书和机械设计手册中有关“常用构件的运动副简图符号”的规定)来代替构件和运动副,并按一定的比例尺表示运动副的相对位置,以此表明机

构的运动特征。表1-1为常用符号示例。 2. 方法 (1)确定组成机构的构件数目 测绘时使被测绘机械缓慢运动,仔细观测机构的运动,区分各个运动单元,从而确定组成机构的构件数目,找出原动件。 (2)测绘运动副的种类、数目 根据相联接两构件的接触情况及相对运动的特点,确定各个运动副的种类。 (3)合理选择投影面,坐标和原动件位置 选与机构的各个构件上的点运动平面皆平行的平面,或选能反映机构运动特征的其他平面做投影面。 转动(或移动)原动件,找出每个构件都能表达清楚的原动件位置。 (4)绘机构运动简图的示意图 徒手按规定的符号,凭目测,使图与实物大致成比例(转动副位置、移动副导路方 位,高副接触点及曲率),从原动件开始,依构件的连接次序,逐渐画出机构运动简图的示意图。用数字1、2、3??区分构件,用字母A、B、C??区分运动副。 (5)绘正式机构运动简图 仔细测量与机构运动有关的尺寸,即转动副间的中心距

数据流图实验报告

数据流图实验报告 篇一:软件工程实验报告 篇二:需求分析实验报告 软件工程实践报告 计科12—1班 杨光敏 08123234 (一)软件需求分析 1.实验目的 学习图形工具软件VISIO,掌握结构化需求分析方法,熟练绘制数据流图;学习快速原型工具的使用。 2.基本要求 (1)针对银行ATM系统进行需求分析工作,了解银行ATM系统的功能、流程;(2)安装VISIOXX以上版本软件,熟练应用Visio绘制DFD图,绘制银行ATM系统数据流图,完成系统的软件逻辑模型; (3)安装Axure RP Pro 或者Balsamiq Mockups快速原型软件,学习绘制软件原型,完成银行ATM系统的软件原型。 3.系统概述 (1)ATM系统为银行提供一套高效稳定可靠的终端服务平台,为储户登录,

存款,取款,查询,打印凭条,转账,修改密码等操作提供便利。 图1 ATM工作流程 (2).用户特点 本软件的用户主要是银行的广大持卡人,大多都具有使用ATM经验。另外,我们的系统要实现的一个重要目标就是当储户取钱出现故障时能在下笔业务进行之前自动恢复。以此来方便用户和保障用户的利益。本系统还为用户提供了足够的界面友好性和易操作性。即使是一个对ATM系统完全陌生的客户,也可以在交易界面的提示下顺利完成交易。 另外一部分的用户是银行工作人员,本系统不予考虑。 4需求说明 (1) 基本描述 ATM终端可以接受一张可识别的银行储蓄卡,通过储户身份验证后,同储户进行各种交互,例如:查询、存款、取款、打印凭条等;处理储户相应的要求,执行对应操作,为储户服务。该系统要求须保持一定时间内的交易记录,系统应每天自动汇总各种交易数据与服务器进行对账。同时,在通讯失败或其他交易结果不确定的情况下,ATM要自动发起冲正交易,以保证账务的完整性。 本系统的实现需要记录一些相关信息,其中包括的信息有:用户信息和交易信息。

数据结构课程设计报告,含菜单

算法与数据结构课程设计 报告 系(院):计算机科学学院 专业班级:计科11005 姓名:张林峰 学号: 201003784 指导教师:詹泽梅 设计时间:2012.6.11 - 2012.6.18 设计地点:12教机房

目录 一、课程设计目的 (2) 二、设计任务及要求 (2) 三、需求分析 (2) 四、总体设计 .............. 错误!未定义书签。 五、详细设计与实现[含代码和实现界面].. 8 六、课程设计小结 (15)

一.设计目的 1.能根据实际问题的具体情况,结合数据结构课程中的基本理论和基本算法,分析并正确确定数据的逻辑结构,合理地选择相应的存储结构,并能设计出解决问题的有效算法。 2.提高程序设计和调试能力。学生通过上机实习,验证自己设计的算法的正确性。学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。 3.初步掌握软件开发过程中问题分析、系统设计、程序编码、测试等基本方法和技能。 4.训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。 5.培养根据选题需要选择学习书籍,查阅文献资料的自学能力。二.设计任务及要求 根据《算法与数据结构》课程的结构体系,设计一个基于DOS菜单的应用程序。要利用多级菜单实现各种功能。比如,主界面是大项,主要是学过的各章的名字诸如线性表、栈与队列、串与数组及广义表等,子菜单这些章中的节或者子节。要求所有子菜单退出到他的父菜单。编程实现时,要用到C++的面向对象的功能。 三.需求分析 菜单运用极其广泛,应用于各行各业。菜单运用起来极其方便。随着社会的发展,社会的行业出现多样化,也就需要各式

数字测图实习心得体会3篇

数字测图实习心得体会3篇 数字测图系统是以计算机及其软件为核心在外接输入输出设备的支持下,对地形空间数据进行采集、输入、成图、绘图、输出、管理的测绘系统。下面是数字测图实习心得体会,希望可以帮到大家。 篇一:数字测图实习心得体会 这次实习,相比于以往的教学型实习,这次实习,相比于以往的教学型实习,真正的工程(实习)显然能够更好的体会所学到的知识。事实也确实是如此,通过这次实习,我真正的体会到了理论联系实际的重要性。测区属于山西的一部分,动植物种类较少,地势不是太,地貌比较复杂,但在这实习的一年里还是体会到了从未有过的艰辛。现在细细想来,这一年的经历,虽然艰苦,但却学到了很多,不仅仅是测量的实际能力,更有面对困难的忍耐。 我明白了扎实的专业知识是提高工作水平的坚实基础.在学校学习专业知识时,可 能感觉枯燥无味,但当你工作以后,你才会发现专业知识是多么的重要.如我学的工程测量.在学校我们只学了些皮毛, 通过毕业测量实习,我学到了很多,比如对软件的操作更加熟练,加强了对所学知识的理解和掌握,很大程度上提高了动手和动脑的能力。书上得来终觉浅,绝知此事要躬行。在实习中,面对的是实实在在的任务,来不得半点推委和逃避。因此,这让我深深明白理论知识的重要,在学校余下的时间里,我要安心把所学的理论知识进行梳理和回顾,做到胸中有沟壑,一目了然。为以后实际的工作打下坚实的基础。 测量学首先是一项精确的工作,通过在学校期间在课堂上对测量学的学习,使我在脑海中形成了一个基本的、理论的测量学轮廓,而实习的目的,就是要将这些理论与实际工程联系起来,这就是工科的特点。测量学是研究地球的形状和大小以及地面点位的科学,从本质上讲,测量学主要完成的任务就是确定地面目标在三维空间的位置以及随时间的变化。在信息社会里,测量学的作用日益重要,测量成果做为地球信息系统的基础,提供了最基本的空间位置信息。构建信息高速公路、基础地理信息系统及各种专题的和专业的地理信息系统,均迫切要求建立具有统一标准,可共享的测量数据库和测量成果信息系统。因此测量成为获取和更新基础地理信息最可靠,最准确的手段。测量学的分类有很多种,如普通测量学、大地测量学、摄影测量学、工程测量学。作为测绘工程专业的跑棱镜的,我们要学习测量的各个方面。测绘学基础就是这些专业知识的基础。

数据结构实验报告图实验

邻接矩阵的实现 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; } }

实验分析数据流和绘制数据流图

实验报告课程名称_软件工程导论__________ 学院____计算机工程学院_________班级14软件1班 学号2014144141 姓名秦川 2016年11月8日

批阅教师时间实验成绩 课程名称软件工程 学号2014144141姓名秦川实验日期2016.11.8实验名称实验2分析数据流和绘制数据流图 实验目的: 1、掌握数据流的分析方法 2、掌握数据流图的绘制 实验内容: 任务一绘制数据流图 任务二分析数据流和绘制数据流图 案例一:总务办公管理系统 案例二:火车票预订系统 实验原理: 数据流图(DFD)是软件系统系统的逻辑模型,仅仅描绘数据在软件中流动(从输入移动到输出)的过程中所经受的变换(即加工处理)。 数据流图的绘制方法:根据数据流图的四种成分:源点或终点,处理,数据存储和数据流,从问题描述中提取数据流图的四种成分;然后依据“自顶向下、从左到右、由粗到细、逐步求精”的基本原则进行绘制。 基本符号如下:

实验过程与结果: 1.运行Microsoft Office Visio2007 运行Microsoft Office Visio2007 2.选择“软件和数据库”中的“数据流模型图”模板 选中数据流模型图模板

3.用鼠标选拉图标进行绘图 任务一绘制数据流图 试绘制工资管理系统的数据流图,根据数据流图的符号说明仔细理解下图含义: 这是学校教职工工资管理系统,教师根据课时表,职工根据任务表来确定个人工资情况,数据按以下方向传递: 首先,对课时表或任务表进行审核,审核后的数据经排序形成专用表格; 再进行一系列额外计算,包括个人所得说、住房公积金、保险费得出具体所发工资,并将工资表发给银行; 然后,向教职工展示工资所得明细; 最后,形成编制报表,更新分类表后,交于会计。 其中,人事科负责人事数据,教师与职工的工资由银行发放,会计做好报表的统计。

数据结构线性表的应用实验报告

实验报告 课程名称____数据结构上机实验__________ 实验项目______线性表的应用____________实验仪器________PC机___________________ 系别_____电子信息与通信学院___ 专业________ ___ 班级/学号______ __ 学生姓名______ ___________ 实验日期_______________________ 成绩_______________________ 指导教师_______________________

实验一.线性表的应用 1.实验目的:掌握线性链表的存储、运算及应用。利用链 表实现一元多项式计算。 2.实验内容: 1)编写函数,实现用链表结构建立多项式; 2)编写函数,实现多项式的加法运算; 3)编写函数,实现多项式的显示; 4)测试:编写主函数,它定义并建立两个多项式,显示 两个多项式,然后将它们相加并显示结果。变换测试用的多项式,检查程序的执行结果。 选做内容:修改程序,选择实现以下功能: 5)多项式求值:编写一个函数,根据给定的x值计算并 返回多项式f(x)的值。测试该函数(从终端输入一个x的值,调用该函数并显示返回结果)。 6)多项式相减:编写一个函数,求两个多项式相减的多 项式。 7)多项式相乘:编写一个函数,求两个多项式的乘积多 项式。 3.算法说明: 1)多项式的建立、显示和相加算法见讲义。可修改显示 函数,使输出的多项式更符合表达规范。

2)多项式减法:同次项的系数相减(缺项的系数是0)。 例如a(x)=-5x2+2x+3,b(x)= -4x3+3x,则a(x)-b(x) =4x3-5x2-x+3。提示:a(x)-b(x) = a(x)+(-b(x))。 3)多项式乘法:两个多项式的相乘是“系数相乘,指数 相加”。算法思想是用一个多项式中的各项分别与另 一个多项式相乘,形成多个多项式,再将它们累加在 一起。例如,a(x)=-5x2+2x+3,b(x)=-4x3+3x,则 a(x)*b(x) = (-4x3)*(-5x2+2x+3)+(3x)*(-5x2+2x+3) = (20x5-8x4-12x3) + (-15x3+6x2+9x) = 20x5-8x4-27x3+6x2+9x。 4.实验步骤: 根据实验报告的要求,我对文件夹里的C文件进行了丰 富和修改,步骤如下: 链表结构建立多项式: typedef struct polynode { float coef; //系数 int exp; //指数 struct polynode *next; //下一结点指针 } PNode; 编写函数,实现多项式的加法运算; PNode * PolyAdd (PNode *f1, PNode *f2) //实现加法功能。

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

实验一静态应变测量原理 在电阻应测量中,如在电桥中仅接入一个电阻应变片,则实际测量值中含有由于温度变化时构件产生的应变,这是实验中所不希望的,通过适当的接线方式,可消除温度的影响,在课本中有许多不同的接线方式,主要分为两大类,一是设置专门温度补偿片,这种方式又可分为公共补偿与单片补偿两种,二是通过工作片间互相补偿,称为互相补偿或自补偿,接线要有一定的技巧。掌握电阻应变测量中的温度补偿方式及不同接线方式的测量结果的区别是很重要的。 一、实验目的 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、回答后面的思考题。

算法与数据结构图的应用实验报告

编号:XH03JW024-05/0 实训(验)报告 班级:姓名:座号:指导教师:成绩: 课程名称:算法与数据结构实训(验):实验六图的应用2011年12月9 日 一、实验目的: 1、掌握图的两种存储结构; 2、掌握图深度优先遍历的基本思想; 3、掌握图广度优先遍历的基本思想。 二、实训(验)内容、记录和结果(含数据、图表、计算、结果分析等) 1、程序源代码: // (以下为邻接表的队操作) void init1(linkqueue *q) { q->front=q->rear=(queue)malloc(sizeof(node)); q->front->next=NULL; } void ENQUEUE1(linkqueue *q, int v) { queue P; P=(queue)malloc(sizeof(node)); P->data=ga[v].vertex; P->next=NULL; q->rear->next=P; q->rear=P; } int DEQUEUE(linkqueue *q) { int k=0,u; queue P; P=q->front->next; while(ga[k].vertex!=P->data) k++; u=k; q->front->next=P->next; if(q->rear==P) q->rear=q->front; return u; } int isempty1(linkqueue *q)

{ if(q->front==q->rear) return 1; else return 0; } void CREATADJLIST(VerNode ga[]) /*建立无向图的邻接表*/ { int i,j,k; EdgeNode *s; getchar(); for(i=0;iadjvex=j; s->next=ga[i].firstedge; ga[i].firstedge=s; } } DFSL(int i) /*以Vi为出发点对邻接表存储的图G进行DFS搜索*/ { EdgeNode *p; printf("node:%c\n",ga[i].vertex);/*访问顶点Vi*/ visited1[i]=1; /*标记Vi已访问*/ p=ga[i].firstedge; /*取Vi边表的头指针*/ while(p) /*依次搜索Vi的邻接点Vj*/ { /*若Vj尚未访问,则以Vj为出发点向纵深搜索*/ if(!visited1[p->adjvex]) DFSL(p->adjvex); p=p->next; /*找Vi的下一个邻接点*/ } } BFSL(int k) //广度优先搜索邻接表表示的图 { int i; EdgeNode *p;

数字测图实习分析方案(完整)

数字测图实习报告 专业 班级 组号 姓名 学号 指导教师 2018 年 11 月 1 日至 2018 年 11 月12 日 目录

一、实习目的及意义1 二、实习内容及要求1 三、数字地形图测绘基本原理2 四、数字地图测绘过程2 五、参考资料7 六、实习心得8

数字测图实习报告 2018-11-1至2018-11-12我们工程测量技术专业学生在校进行了为期两个星期的数字化测图实习。 一、实习目的及意义 通过这次实习,使我们对《数字化测图》这门课程有一个系统的了解和掌握,进一步加深我们对数字化测图的基本理论和基本知识的理解,提高我们实际操作的能力。本次实习培养了我们理论联系实际,分析问题以及实地解决问题的能力,更要求我们在工作中要实事求是,严谨认真,吃苦耐劳,同时还要团结协作,相互配合,共同完成好小组的实习任务。从各方面锻炼自己,为以后的测量工作打下良好的基础。 二、实习内容及要求 1、实习的具体内容如下: 1、数字地图测绘 <1)练习和掌握全站仪的使用方法; <2)每组测绘一幅1:1000的数字地图; <3)熟悉和掌握南方CASS地形测图软件编辑地形图的基本方法。 2、数字地图的工程应用 <1)完成测站改正; <2)完成设计路线的断面图绘制; <3)用DTM和断面法计算土方量。 3、MAPGIS扫描矢量化 熟悉MAPGIS软件进行扫描矢量化的步骤和方法。 2、实习的具体要求如下 (1)掌握数字化测图的基本过程和基本方法。 (2)掌握并熟练全站仪的使用。 (3)掌握使用数字成图软件<南方CASS)进行数字地图编绘的 方法。

(4)掌握矢量化软件进行地图的扫描矢量化操作步骤和方法。 三、数字地形图测绘基本原理 采用草图法进行数字化测图,主要作业过程分为三个步骤:数据采集,数据处理及地形图的数据输出。在本次实习中利用中纬全站仪进行外业数据采集,在内业计算机上采用南方CASS软件进行数据处理成图。 四、数字地图测绘过程 1、踏勘,选点 本次实习地点是杨凌职业技术学院南校区,地形十分熟悉。 老师带领我们在校区大门口选择一点作为已知点,根据一份小比例尺图,选出一条闭合导线,现场选出导线点,并均匀分布在校内,共计6个点。导线点的选择应注意是否相互通视,架设仪器是否安全方便。 2、控制测量 全站仪测角、测边: 在已知导线点上架设全站仪,对中整平后量取仪器高、开机。同时将棱镜架设在待测点出对中整平。 在全站仪中创建一个文件CL24-02,用来保存测量数据.。 在当前文件下,按照提示输入测站点点号和给定的坐标、仪器高、目标高<取至毫M位),设置EDM,并瞄准后视点,进行后视置零定向。 定向完后仪器照准目标点棱镜,盘左盘右观测并测存,将屏幕显示结果记录在导线坐标记录表上。 导线边长、水平角施测要求及精度要求: ①观测:水平角观测一个测回,起始点采用全圆方向法观 测,内角采用测回法观测;距离测量往测一测回<瞄准目 标一次,读数4次),直接读记平距; ②取位:角度取至秒,距离取至mm,坐标取至mm;

数据结构实验报告图实验

图实验 一,邻接矩阵的实现 1.实验目的 (1)掌握图的逻辑结构 (2)掌握图的邻接矩阵的存储结构 (3)验证图的邻接矩阵存储及其遍历操作的实现 2.实验内容 (1)建立无向图的邻接矩阵存储 (2)进行深度优先遍历 (3)进行广度优先遍历 3.设计与编码 #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 #include using namespace std; #include "" 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;

相关主题