图的深度优先遍历和广度优先遍历

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;ivexnum;i++)

{

cin>>G->adjlists[i].vertex;

G->adjlists[i].edgelink=NULL;

}

cout<<"开始输入边表信息:"<

for (k=0;karcnum;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<adjlists[i].vertex<<" ";

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;ivexnum;i++)

{

相关文档
最新文档