图的深度优先遍历和广度优先遍历
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华北水利水电学院数据结构实验报告
20 10 ~20 11 学年第一学期2008级计算机专业
班级:107学号:200810702姓名:文波
实验四图的应用
一、实验目的:
1.掌握图的存储结构及其构造法
2.掌握图的两种遍历算法及其执行过程
二、实验容:
以邻接矩阵或邻接表为存储结构,以用户指定的顶点为起始点,实现无向连通图的深度优先及广度优先搜索遍历,并输出遍历的结点序列。
提示:首先,根据用户输入的顶点总数和边数,构造无向图,然后以用户输入的顶点为起始点,进行深度优先和广度优先遍历,并输出遍历的结果。
三、实验要求:
1.各班学号为单号的同学采用邻接矩阵实现,学号为双号的同学采用邻接表实现。
2.C/ C++完成算法设计和程序设计并上机调试通过。
3.撰写实验报告,提供实验结果和数据。
4.写出算法设计小结和心得。
四、程序源代码:
#include
#define MaxVerNum 50
struct edgenode
{
int endver;
int inform;
edgenode* edgenext;
};
struct vexnode
{
char vertex;
edgenode* edgelink;
};
struct Graph
{
vexnode adjlists[MaxVerNum];
int vexnum;
int arcnum;
};
//队列的定义及相关函数的实现
struct QueueNode
{
int nData;
QueueNode* next;
};
struct QueueList
{
QueueNode* front;
QueueNode* rear;
};
void EnQueue(QueueList* Q,int e)
{
QueueNode *q=new QueueNode;
q->nData=e;
q->next=NULL;
if(Q==NULL)
return;
if(Q->rear==NULL)
Q->front=Q->rear=q;
else
{
Q->rear->next=q;
Q->rear=Q->rear->next;
}
}
void DeQueue(QueueList* Q,int* e)
{
if (Q==NULL)
return;
if (Q->front==Q->rear)
{
*e=Q->front->nData;
Q->front=Q->rear=NULL;
}
else
{
*e=Q->front->nData;
Q->front=Q->front->next;
}
}
//创建图
void CreatAdjList(Graph* G)
{
int i,j,k;
edgenode* p1;
edgenode* p2;
cout<<"请输入顶点数和边数:"< cin>>G->vexnum>>G->arcnum; cout<<"开始输入顶点表:"< for (i=0;i { cin>>G->adjlists[i].vertex; G->adjlists[i].edgelink=NULL; } cout<<"开始输入边表信息:"< for (k=0;k { cout<<"请输入边 cin>>i>>j; p1=new edgenode; p1->endver=j; p1->edgenext=G->adjlists[i].edgelink; G->adjlists[i].edgelink=p1; p2=new edgenode; p2->endver=i; p2->edgenext=G->adjlists[j].edgelink; G->adjlists[j].edgelink=p2; //因为是无向图,所以有两次建立边表的过程 } } //-------------------------------------------------------------深度优先遍历void DFS(Graph *G,int i,int visit[]) { cout< visit[i]=1; edgenode *p=new edgenode; p=G->adjlists[i].edgelink; if(G->adjlists[i].edgelink&&!visit[p->endver]) { DFS(G,p->endver,visit); } } void DFStraversal(Graph *G,char c)//深度优先遍历 { cout<<"该图的深度优先遍历结果为:"< int visit[MaxVerNum]; for(int i=0;i {