ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:211.97KB ,
资源ID:18834537      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18834537.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构实验报告图的遍历讲解Word文件下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构实验报告图的遍历讲解Word文件下载.docx

1、int adjvex;struct node *nextEdgeNode;vextype vex;EdgeNode * firstedge;VexNode;VexNode adjvexMAXSIZE;int n,e;ALGraph;四、 概要设计为了实现上述程序功能,代码如下:#includestdlib.hstring.htypedef struct node/边表结点 int adj;/边表结点数据域 struct node *next;node;typedef struct vnode/顶点表结点 char name20; node *fnext;vnode,AList20; AList

2、 List;/邻接表 int v,e;/顶点树和边数*Graph;/建立无向邻接表Graph CreatDG() Graph G; int i,j,k; node *s; G=malloc(20*sizeof(vnode); printf(请输入图的顶点数和边数(空格隔开):); scanf(%d%d,&G-v,&e);/读入顶点数和边数 for(i=0;iListi.name);/读入顶点信息 G-Listi.fnext=NULL;/边表置为空表 for(k=0;kadj=j;next=G-Listi.fnext;Listi.fnext=s;/将新结点*s插入顶点Vi的边表头部adj=i;/

3、邻接点序号为iListj.fnext;Listj.fnext=s;/ 将新结点*s插入顶点Vj的边表头部 return G;/有向邻接图Graph CreatAG() node *q;请输入图的顶点数和边数【空格隔开】: for (i=0; /读入顶点信息 for (k=0;请请输入第%d边的两顶点序号【空格隔开】: q=(node *)malloc(sizeof(node); /生成新边表结点s q- /邻接点序号为jListi.fnext=q;/输出图的邻接表void Print(Graph G) int i; node *p;t=邻接表=n p=G-%d | %3s,i,G- while

4、(p)-%3sListp-adj.name);%d,p-adj); p=p-next;ntypedef struct char vex20;Lists20; Lists l; int edge2020;/邻接矩阵 int v1,e1;/顶点数和弧数AGraph;int data; /* 某顶点与已构造好的部分生成树的顶点之间权值最小的顶点 */int lowcost; /* 某顶点与已构造好的部分生成树的顶点之间的最小权值 */ClosEdge20; /* 用普里姆算法求最小生成树时的辅助数组 */void CreateAN(AGraph *G1) /* 构造邻接矩阵结构的图G */ int

5、i,j,k,w;G1-v1,&e1); for(i=1;=G1-v1;请输入图%d号元素:,i);li.vex);i+)/初始化邻接矩阵 for(j=1;jedgeij = 9; for(k=1;e1;请输入两顶点及边的权值(空格隔开):%d%d%dj,&w);edgeij=w;edgeji=w;void PrintAN(AGraph *G1) int i,j;t=邻接矩阵=n%3d,G1-edgeij);/输出各顶点的度数void Du(Graph G)n顶点%2s的度为: j=0; j+; p=p-%dn,j);/栈typedef struct stack int x; struct st

6、ack *next;stack;int push(stack *s,int i) stack *p; p=(stack *)malloc(sizeof(stack); p-x=i;next=s- s-next=p; return 1;int pop(stack *s,int j) stack *p=s-/保存栈顶指针 j=p-x;next=p- /将栈顶元素摘下 free(p);/释放栈顶空间 return j;/拓扑排序void Topo(Graph G,stack *s) int i,k, count; int j=0; int indegree20=0; p=G-; while(p!=N

7、ULL) indegreep-adj+; p=p-i+) if(indegreei=0) push(s,i); count=0; while(s-next! i=pop(s,j);%2s +count; for(p=G-p!=NULL;p=p-next) k=p-adj; if(!(-indegreek) push(s,k); if(countadj) DFS(G,p-adj,flag);/深度优先遍历void DFSTravel(Graph G) int flag20;/标志数组 flagi=0;flagi) DFS(G,i,flag);/建立队列 int *elem; int front,

8、 rear;*Queue;/队列初始化void InitQueue(Queue Q) Q-elem=(int *)malloc(20*sizeof(int);Q-elem) exit(0);front=Q-rear=0;/入队void Enter(Queue Q, int e) if(Q-rear + 1)%20!= Q-front) Q-elemQ-rear =e; else队列满!rear=(Q-rear+1)%20;/出队void Leave(Queue Q, int e) if(Q-rear ! e=Q-front;队列空!front=(Q-front+1)%20;/广度优先遍历voi

9、d BFSTravel(Graph G) Queue Q; int i,j=0; Q=malloc(sizeof(20); InitQueue(Q); if(flagi=0) flagi=1; printf(%2s Enter(Q,i); while(Q-front!=Q-rear) Leave(Q,j);/队头元素出队并置为j p=G- while(p! if(flagp-adj=0) printf( flagp-adj=1; Enter(Q,p- p=p- int minimum(ClosEdge cl,int vnum) int w,p; w=1000;=vnum; if(cli.low

10、cost!=0&cli.lowcostedgeuj; closedgeu.lowcost=0; /* 初始,U=u */ k=minimum(closedge,G1-v1); /* 求出生成树的下一个顶点 */%d-%dn,closedgek.data,k); /* 输出生成树的边 */ closedgek.lowcost=0; /* 第k顶点并入U集 */j+) /* 新顶点并入U后,修改辅助数组*/ if(G1-edgekjedgekj; /菜单列表void menu()t*图的遍历问题*ntt- 1.建立无向邻接图 -ntt- 2.建立有向邻接图 -ntt- 3.建立无向邻接矩阵 -nt

11、t- 4.输出各顶点的度 -ntt- 5.拓扑排序 -ntt- 6.深度优先遍历 -ntt- 7.广度优先遍历 -ntt- 8.prim算法生成最小生成树-ntt- 9-退出 -nt*n/主函数void main() AGraph G1; int choice,u; stack *s=(stack *)malloc(sizeof(stack);next =NULL; while(1) menu();请输入选择:choice); switch(choice) case 1:G=CreatDG();Print(G);printf(nnbreak; case 2:G=CreatAG(); case

12、3:CreateAN(&G1);PrintAN(& case 4:Du(G); case 5:拓扑排序:Topo(G,s); case 6:深度优先遍历:DFSTravel(G); case 7:广度优先遍历:BFSTravel(G); case 8: printf(请输入起点序号: scanf(u);Prim算法: Prim(&G1,u); break; case 9: exit(0); default:输入错误,请重新输入:nn 五、 使用说明1、程序名为实验图的遍历.exe,运行坏境为VC6.0.程序执行后显示如图所示:2、建立无向邻接图3、输出各顶点的度4、进行深度优先遍历5、进行广度

13、优先遍历6、建立有向邻接图7、拓扑排序8、建立无向邻接矩阵9、prim算法生成最小生成树八、实验总结通过对本次试验的学习,使我们明白了合作分工的重要性,这并不是一个容易的过程,中间碰到了许多问题,但我们都一一解决,有关于图这部分的内容很复杂,但是却非常重要,掌握好图的遍历有助于我们提升今后解决实际问题的能力,对我们非常有帮助。注:模块分工张纪远(2014100518)主函数的编写及页面的设计;段慧娟(2014100512)建立无向连接图及有向连接图;梁丽蓉(2014100526)建立无向邻接矩阵及及输出各顶点的度;周振军(2014100551)拓扑排序及深度优先遍历;朱新祥(2014100552) 广度优先遍历及prim算法生成最小生成树。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1