实验四++++图的遍历与应用_第1页
实验四++++图的遍历与应用_第2页
实验四++++图的遍历与应用_第3页
实验四++++图的遍历与应用_第4页
实验四++++图的遍历与应用_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验4图的扫描与应用一、实验目的1 .把握图的意思2 .把握用邻接矩阵和邻接表的方法记述图的记忆结构3 .了解和掌握深优先扫描和广优先扫描的存储结构。二、实验要求1 .仔细阅读和掌握本实验的参考程序。2 .根据图的操作需要,制作图后,用遍历算法验证制作结果。3 .保存程序的执行结果,结合程序进行分析。三、实验内容以下参考程序使用相邻表的方法创建图,并使用深度优先遍历方法遍历图。 请充分理解程序,实现图的广度优先遍历。答案:#include#include#define MaxVertexNum 30#define Flase 0#define True 1int visitedMaxVertexNum;类型结构节点装模作样int adjvex;char Info;结构节点*下一步;EdgeNode;类型结构节点装模作样char vertex;EdgeNode *firstedge;VertexNode;typedef struct装模作样vertexnodeadjlist maxvertexnum ;int n,e;ALGraph;typedef struct装模作样int dataMaxVertexNum;int front,rear;SeqQueue,*PSeqQueue;/void DFS(ALGraph G,int v )void BFS(ALGraph G,int v )void DFS(ALGraph G,int v )pseqqueueinit_sequeen ()装模作样PSeqQueue Q;q=(pseqqueue ) malloc (sizeof (seq queue ) )if(Q=NULL )装模作样printf(malloc is failedn );exit(1)以下称为else装模作样Q-front=0;Q-rear=0;以下称为return Q;以下称为intempty_sequeen(pseqqueueq )装模作样if(Q (Q-front=Q-rear ) )装模作样return 1;以下称为else装模作样return 0;以下称为以下称为voidin_sequeen(pseqqueueq,int x )装模作样if (q-rear1) % maxvertexnum=q-front )装模作样printf (满队n );/return -1;以下称为else装模作样Q-rear=(Q-rear 1)%MaxVertexNum;Q-dataQ-rear=x;以下称为以下称为voidaout_sequeen(pseqqueueq,int *x )装模作样if(empty_sequeen(q ) )装模作样printf (队列空闲n );以下称为else装模作样q-front=(q-front1) % maxvertexnum;*x=Q-dataQ-front;以下称为以下称为void CreateALGraph(ALGraph *G )装模作样int i、j、k;/int N,e;EdgeNode *p=NULL;EdgeNode *q=NULL;printf (请输入顶点数和边数:);scanf (“% d”d,G-n,G-e );printf(n=%d,e=%dnn ,G-n,G-e );getchar ();for(i=0; i G-n; i )/*创建具有两个顶点的顶点表*/装模作样printf (请输入%d个顶点文字资讯):.i 1,G-n scanf(%c”,G-adjlisti.vertex );getchar ();G-adjlisti.firstedge=NULL;以下称为for(k=0; k 2*G-e; k )装模作样printf (请输入%d个边缘对应的顶点编号):、2*G-e;scanf (“% d”d,I,j ); /*读取边缘的顶点对应编号*/p=(edge node * ) malloc (sizeof (edge node ) ) /生成新的边表节点pp-adjvex=j;q=G-adjlisti.firstedge;if (g-adj list I .first edge=null )装模作样p-next=NULL;G-adjlisti.firstedge=p;以下称为else装模作样while(q-next!=NULL )装模作样q=q-next;以下称为q-next=p;p-next=NULL;以下称为以下称为printf(n图形创建成功,相应的相邻表格如下:n ) :for(i=0; i G-n; I )装模作样p=G-adjlisti.firstedge;printf(%c-”,G-adjlisti.vertex );while(p!=NULL )装模作样printf( %c , g-adj列表 p-adjvex .vertex );p=p-next;以下称为printf(n );以下称为printf(n );以下称为voidabfsbtraverse(algraphs )装模作样int v;for(v=0; v G.n; v )装模作样visitedv=Flase;以下称为for(v=0; v G.n; v )装模作样if! visitedv )装模作样BFS(G,v )以下称为以下称为printf(n );以下称为void DFStraverse(ALGraph G )装模作样int v;for(v=0; v G.n; v )装模作样visitedv=Flase;以下称为for(v=0; v G.n; v )装模作样if! visitedv )装模作样DFS(G,v )以下称为以下称为printf(n );以下称为void DFS(ALGraph G,int v) /*从第顶点开始深度优先图G */装模作样EdgeNode *p;int w;printf(%c”,G.adjlistv.vertex );visitedv=True;for(p=G.adjlistv.firstedge; p; p=p-next )装模作样w=p-adjvex;if! visitedw )装模作样DFS(G,w )以下称为以下称为以下称为void BFS(ALGraph G,int v )装模作样EdgeNode *p;int u,w;PSeqQueue Q;q=init_sequeen ();printf(%c”,G.adjlistv.vertex );visitedv=True;in_sequeen(q,v )while (! Empty_SeqQueue(Q ) )装模作样Out_SeqQueue(Q,u )for(p=G.adjlistu.firstedge; p; p=p-next )装模作样w=p-adjvex;if! visitedw )装模作样printf(%c”,G.adjlistw.vertex );visitedw=True;In_SeqQueue(Q,w )以下称为以下称为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论