实 验 报 告
课程名称 数据结构
实验项目 实现深度优先搜索与广度优先搜索算法
一、实验目的
1、通过本实验,掌握图,无向图的基本概念,掌握图的遍历;
2、掌握图的深度优先搜索(DFS)与广度优先搜索(BFS)算法。
二、实验内容
1、建立图的存储方式;
2、图的深度优先搜索算法;
3、图的广度优先搜索算法。
三、实验原理
图的遍历是图的算法中一种非常重要的算法,通过建立图的存储结构,采用深度优先搜
索与广度优先搜索算法可以进行图的遍历;
深度优先遍历是树的先根遍历的推广,是将某一条枝上的所有节点都搜索到了之后,才
转向搜索另一条枝上的所有节点;
广度优先遍历与深度优先遍历的区别在于:广度优先遍历是以层为顺序,将某一层上的
所有节点都搜索到了之后才向下一层搜索。
四、实验步骤
1.建立图的存储结构;
2.输入图的基本接点与信息,初始化图;
3.编写图的深度优先搜索(DFS)和广度优先搜索算法(BFS)程序;
4.采用菜单形式进行显示与选择。
5.测试数据和结果显示
(1)从键盘输入顶点数和边数;
(2)输入顶点信息;
(3)输入边的信息,以(a,b)的形式输入边的信息,构建一个无向图;
(4)对此无向图进行深度优先搜索和广度优先搜索,并输出正确的序列。
五、程序源代码及注释
#include
#include
#include
#define MAX_VERTEX_NUM 20
typedef struct ArcNode{
int adjvex;
struct ArcNode* nextarc;
}ArcNode;
typedef struct VNode{
char cData;
ArcNode* firstarc;
}VNode,AdjList[MAX_VERTEX_NUM];
typedef struct {
AdjList vertices;
int vexnum;
int arcnum;
}ALGraph;
typedef struct LinkNode{
ArcNode* parc;
struct LinkNode* next;
}LinkNode;
int Visited[MAX_VERTEX_NUM];
int PrintCheck(ALGraph* pag)
{
int i;
ArcNode* p;
printf("\nCheck the Graph!\n");
printf("No\tdata\tnext\tnext\t\n");
for(i=0; ivexnum; i++)
{
printf("%d\t%c\t",i,pag->vertices[i].cData);
p = pag->vertices[i].firstarc;
while(p)
{
printf("%d\t",p->adjvex);
p = p->nextarc;
}
printf("\n");
}
return 1;
}
int CreateGraph(ALGraph* pag,int start,int end)
{
ArcNode* arcNodes = (ArcNode*)malloc(sizeof(ArcNode));
ArcNode* arcNodee = (ArcNode*)malloc(sizeof(ArcNode));
ArcNode* p;
if(!arcNodes || !arcNodee) return 0;
arcNodes->adjvex = end;
p = pag->vertices[start].firstarc;
if(!p)
{
arcNodes->nextarc = pag->vertices[start].firstarc;