2023年数据结构图的遍历实验报告.pdf
实验报告课程名:数据结构(C语言版)实验名:图的遍历姓班学时名:级:号:间:2 023.11.15一实验目的与规定1.掌握图的遍历的方法2.运 用 C 语言实现图的遍历二实验内容 将一个图存储起来 对该图分别进行先深和先广遍历三实验结果与分析程序:#includ e#incl u d e#defineINF I N I TY3 276 7#d e f i ne MAX_VEX 20/最大顶点个数#d efi n e QUEUE_SIZE(MAX_VEX+1)队列长度/us i ng n a mespace s t d;b o ol*vis i t ed;/访问标志数组,避免同一顶点多次访问/*图的邻接矩阵存储结构*/ty p e def str u ctch ar*v e xs;/顶点向量int a res MAX_VEXMAX_VEX;邻接矩阵in t v exnum,arc n u m;/图的当前顶点数和弧数 Graph;/*队 歹 lj 类*/cla s s Queu e p u b 1 ic:v o id Init Q ueu e()b ase=(int*)maHoc(QUEUE_S I ZE si z e o f(i n t);f r on t=r ear=0;v o id E nQue u e(i nt e)base rear=e;rear=(rea r+1 )%QUEUE_SIZE;)vo i d DeQ u e u e(in t&e)e=b asefront;fro n t=(fr o nt+1 )%QUEUE_SIZE;public:int*b ase;i nt fr o nt;int rea r;);/*图G中查找元素c的位置*/int Loca t e(Gr a p h G,char c)(f o r(in t i=0;i G.v e xn u m;i+)if(G.vex s i=c)re t urn i;retu r n-1;)/*创建无向网*/voi d Cr e a t eUDN(Gr a p h&G)i nt i,j,w,sl,s2;c har a,b,temp;printf(输入顶点数和弧数:);s c a nf(%d%d,&G.v e xnum,&G.arcnum);temp=g e tchar();接受回车G.v e xs=(cha r*)mall o c(G.vexnum*s i z e of(ch a r);/分派顶点数目p rint f(输入(1 个顶点.n”,G.v ex n um);f o r(i=0;i VGv e xnum;i+)/初始化顶点printf(n 输入顶点金”,i);s canf(M%cn,&G.v e x s i);tern p=getch a r();接受回车)f or(i=0;iG.ve x num;i+)初始化邻接矩阵fb r(j=O;jG.v exnum;j+)G.arcs i j=INFINIT Y;prin t f(输入 d 条弧.n n,G.arcnum);for(i=0;i=0&kG.v exnum)/k 合理f o r(int i=0;i=0&i=0&jG.vexn u m)/i,j合理f or(in t k=j+l;kG.vexnum;k4-+)if(G.arcsik!=INFIN I TY)return k;)r e t um-1 ;)/*深度优先遍历*/v o i dDFS(GraphG,int k)i nt i;if(k=1)第一次执行D FS 时,k 为一1f or(i=0;i=0 ;i=N e x t V e x (G,k ,i)if(!vis i t ed i )D F S(G,i);/对k的尚未访问的邻接顶点i递归调用DF S)I*广度优先遍历*/vo id BFS(Grap hG)in t k;Q u e u e Q;辅助队列QQ.I n i t Q u e u e();f o r(in t i=0 ;i=0 ;w=N ex t V e x (G,k,w)i f(!v i s it ed w)w为k的尚未访问的邻接顶点v i s it ed w=t r u e;p r in t f(n%c”,Gv e x s w);Q.E n Q u e ue(w);/*主函数*/void m a i n()i n t i;G r a ph G;C reateUDN(G);vi s i t 6d=(bo o 1 *)malloc(G.vexn u m*s ize o f(b o o 1);printf(n广度优先遍历:);f o r(i=0;i G.ve x n u m;i+)visitedi=f a 1 se;DF S(G-1);pri n tf(n n深度优先遍历:”);for(i=0;iG.vexnum;i+)visite d i=false;B FS(G);图1.图的遍历程序运营结果