深度优先遍历(邻接矩阵)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

上机实验报告

学院:计算机与信息技术学院

专业:计算机科学与技术(师范)课程名称:数据结构

实验题目:深度优先遍历(邻接矩阵)班级序号:师范1班

学号:************

学生姓名:**

指导教师:***

完成时间:2015年12月25号

一、实验目的:

1﹒掌握图的基本概念和邻接矩阵存储结构。

2﹒掌握图的邻接矩阵存储结构的算法实现。

3﹒掌握图在邻接矩阵存储结构上遍历算法的实现。

二、实验环境:

Windows 8.1

Microsoft Visual c++ 6.0

二、实验内容及要求:

编写图的深度优先遍历邻接矩阵算法。建立图的存储结构,能够输入图的顶点和边的信息,并存储到相应存储结构中,而后输出图的邻接矩阵。

四、概要设计:

深度优先搜索遍历类似于树的先根遍历,是树的先根遍历的推广。假设初始状态是图中所有的顶点未曾被访问,则深度优先遍历可从图的某个顶点V出发,访问此顶点,然后依次从V的未被访问的邻接点出发深度优先遍历图,直至图中所有和V有路径相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中的一个未被访问的顶点,重复上述过程,直至图中所有顶点都被访问到为止。

以图中无向图G4为例,深度优先遍历图的过程如图所示。假设从顶点V1出发进行搜索,在访问了顶点V1后,选择邻接点V2。因为V2未曾访问,则从V2出发进行搜索。依次类推,接着从V4,V8,V5出发进行搜索。在访问了V5之后,由于V5的邻接点已都被访问,则搜索回到V8。由于同样的理由,搜索继续回到V4,V2直至V1,此时由于V1的另一个邻接点为被访问,则搜索又从V1到V3,再继续进行下去。由此得到顶点的访问序列为:

V1 V2 V4 V8 V5 V3 V6 V7

五、代码

#include

#include

#define n 8

#define e 9

typedef char vextype;

typedef float adjtype;

int visited[n];

//定义结构体

typedef struct node

{

vextype vexs[n];

adjtype arcs[n][n];

}graph;

graph *ga;

//建立无向网络

void CREATGRAPH()

{

int i,j,k;

float w;

printf("请输入各个顶点:");

for(i=1;i<=n;i++)

ga->vexs[i]=getchar();

getchar();

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

ga->arcs[i][j]=0;

printf("\n请输入边及其的权:(从1开始输入)\n");

for(k=0;k

{

scanf("%d%d%f",&i,&j,&w);

ga->arcs[i][j]=w;

ga->arcs[j][i]=w;

}

}

//深度优先遍历

void DFS(int i)

{

int j;

printf("node:%c\n",ga->vexs[i]);

visited[i]=1;

for(j=1;j<=n;j++)

if((ga->arcs[i][j]==1)&&(!visited[j]))

DFS(j);

}

//主函数

void main()

{

ga=(graph *)malloc(sizeof(graph));

CREATGRAPH();

DFS(1);

}

六、运行界面

七、实验中遇到的问题及总结

已经在广度优先遍历中遇到过的问题这次没有再发生,不过最开始出现了一些小问题,花费了很长的时间。通过这几次实验,我变得更加的耐心认真。在以后的学习中我一定会更加努力。

八、参考文献

《数据结构——用C语言描述》

相关文档
最新文档