深 圳 大 学 实 验 报 告
课程名称: 数据结构实验与课程设计
实验项目名称: 图的广度优先搜索
学院: 计算机与软件学院
专业: 计算机科学与技术
指导教师: 蔡茂国
报告人:郭治民 学号:2011150117 班级: 3
实验时间: 2012-11-05
实验报告提交时间: 2012-11-06
教务部制
一、实验目的与要求: 1、实验目的 掌握图结构的说明、创建以及图的存储表示(邻接表) 掌握队列的定义、插入、删除、清空、判空方式 掌握广度优先搜索算法原理 掌握广度优先搜索算法的编程实现方法 2、实验要求 熟悉C++语言编程 熟悉队列的操作原理 图的存储表示 熟悉广度优先搜索算法原理 熟练使用C++语言,实现广度优先搜索算法 二、实验内容: 1、问题描述 给定一个结点(始点),从它开始,对(连通)图中其它结点进行广度优先搜索。 2、图的广度优先搜索算法 所有顶点访问标志visited[]设置为FALSE,从某顶点v0开始,访问v0,visited[v0]=TRUE,将v0插入队列Q (1) 如果队列Q不空,则从队列Q头上取出一个顶点v,否则结束 (2) 依次找到顶点v的所有相邻顶点v’,如果visited[v’]=TRUE (3) 重复(1),(2) 3、输入 第一行:样本顶点个数,假设为n 第二行,n个顶点(用空格隔开) 第三行,图中边(或弧)的数目 第四行开始,每一行是边(弧)的两个顶点(用空格隔开) 4、输入样本 5、输出 广度优先搜索的顶点序列(用空格隔开,回车前无空格) 6、输出样本 三、实验步骤与过程: 1、图的定义 2、找到顶点字符在邻接表中对应的序号 3、将一个新的边插入到邻接表中 4、创建图的邻接表 5、显示邻接表 6、队列定义 7、清空队列 8、在队列中插入一个数据元素 9、在队列中删除一个数据元素 10、判断队列是否为空 11、图的广度优先搜索函数 12、主函数 代码: #include \"stdio.h\" #include \"stdlib.h\" typedef char DataType; #define MaxSize 100 #define MaxVertices 10 #define MaxEdges 100 #define MaxWeight 10000 typedef struct { DataType list[MaxSize]; int size; }SeqList; typedef struct { DataType queue[MaxSize]; int rear; int front; int count; }SeqCQueue; typedef struct { int row; int col; int weight; }RowColWeight; typedef struct { SeqList Vertices; int edge[MaxVertices][MaxVertices]; int numOfEdges; }AdjMGraph; //顺序表初始化 void ListInitiate(SeqList *L) { L->size=0; } //顺序表插入函数 int ListInsert(SeqList *L,int i,DataType x) { int j; if (L->size>=MaxSize) { printf (\"顺序表已满无法插入!\\n\"); return 0; } else if (i<0||i>L->size) { printf (\"参数i不合法!\\n\"); return 0; } else { for (j=L->size;j>i;j--) L->list[j]=L->list[j-1]; L->list[i]=x; L->size++; return 1; } } //图G初始化 void Initiate(AdjMGraph *G,int n) { int i,j; for (i=0;i 因篇幅问题不能全部显示,请点此查看更多更全内容