收藏 分享(赏)

图的深度优先与广度优先遍历.doc

上传人:精品资料 文档编号:9512631 上传时间:2019-08-11 格式:DOC 页数:5 大小:56KB
下载 相关 举报
图的深度优先与广度优先遍历.doc_第1页
第1页 / 共5页
图的深度优先与广度优先遍历.doc_第2页
第2页 / 共5页
图的深度优先与广度优先遍历.doc_第3页
第3页 / 共5页
图的深度优先与广度优先遍历.doc_第4页
第4页 / 共5页
图的深度优先与广度优先遍历.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、1图的深度优先与广度优先遍历实验题目:从键盘输入的数据创建图(图的存储结构可采用邻接矩阵或邻接表) ,并对图进行深度优先搜索和广度优先搜索(1)算法设计思路简介先定义邻接矩阵和邻接表类型,实现邻接表和邻接矩阵的相互转换,输出邻接表和邻接矩阵,再实现深度和广度优先遍历在主程序中提供下列菜单:1图的建立2深度优先遍历图3广度优先遍历图0结束(2)算法描述:可以用自然语言、伪代码或流程图等方式VertexType; /顶点类型MGraph; /图的邻接矩阵类型ArcNode; /定义邻接表类型void DispMat(MGraph g) /输出邻接矩阵void MatToList(MGraph g,

2、ALGraph * int info; VertexType; typedef struct /图的定义int edgesmaxmax;int n,e;VertexType vexsmax; MGraph;/定义邻接表类型typedef struct ANode 2int adjvex; struct ANode *nextarc; /指向下一条弧的指针int info; /存放弧的信息(权值)ArcNode;typedef struct Vnode int data; ArcNode *firstarc; /指向第一条弧VNode;typedef VNode AdjListmax; /Adj

3、List 是邻接表类型,把大表变成几个小的连接到一起typedef struct AdjList adjlist;int n,e; /图中顶点数和和边数ALGraph;int visitedmax; /全局数组用于判断后面节点是否被访问过void DispMat(MGraph g) /输出邻接矩阵int i,j;for(i=0;iadjlisti.firstarc=NULL;for(i=0;iadjvex=j;p-info=g.edgesij;p-nextarc=G-adjlisti.firstarc; /将*p 连接到表后3G-adjlisti.firstarc=p;G-e=g.e;G-n=

4、g.n; void DispAdj(ALGraph *G) /输出邻接表 int i;ArcNode *p; for(i=0;in;i+)p=G-adjlisti.firstarc;if(p!=NULL)printf(“ %d: “,i); while(p!=NULL) printf(“ %d “,p-adjvex); /输出弧的终点p=p-nextarc; printf(“n“);void change(int visited,ALGraph *G) /给全局变量 visited 赋初值int i;for(i=0;in;i+)visitedi=0;void ListToMat(ALGraph

5、 *G,MGraph g) /将邻接表转换为邻接矩阵的形式int i,j;int n=G-n;ArcNode *p;for(i=0;iadjlisti.firstarc;while(p!=NULL)g.edgesip-adjvex=p-info;p=p-nextarc;4g.n=n;g.e=G-e;void DFS(ALGraph *G,int v) /递归深度优先遍历ArcNode *p; /change(visited,G);visitedv=1; /第一个点设为已被访问并输出,接着以他为主进行遍历printf(“ %d“,v); p=G-adjlistv.firstarc;while(p

6、!=NULL)if(visitedp-adjvex=0)DFS(G,p-adjvex);p=p-nextarc; void BFS(ALGraph *G,int v) ArcNode *p;int queuemax,front=0,rear=0; /定义循环队列并初始化int visitedmax;int w,i;for(i=0;in;i+)visitedi=0;printf(“ %d “,v); /把输入的第 v 个作为第一个广度遍历的节点,一直这样进行下去visitedv=1; rear=(rear+1)%max; queuerear=v; /把 v 入队while(front!=rear

7、) /队列不为空的时候 front=(front+1)%max; w=queuefront;p=G-adjlistw.firstarc; while(p!=NULL) if(visitedp-adjvex=0) /当前节点未被访问 printf(“%d “,p-adjvex);visitedp-adjvex=1;rear=(rear+1)%max; queuerear=p-adjvex;p=p-nextarc;printf(“n“);void main()5 int i,j;MGraph g;ALGraph *G; int Amax6;printf(“请输入邻接矩阵:n“);for(i=0;i

8、6;i+)for(j=0;j6;j+)scanf(“%d“,g.n=6;g.e=10;for(i=0;ig.n;i+)for(j=0;jg.n;j+)g.edgesij=Aij; /给邻接矩阵赋值printf(“这是图的邻接矩阵的形式:“);printf(“n“);DispMat(g); /输出邻接矩阵的函数G=(ALGraph *)malloc(sizeof(ALGraph);MatToList(g,G);printf(“这是图的邻接表的形式:“);printf(“n“);DispAdj(G);printf(“从顶点 0 开始的深度优先遍历:n“);DFS(G,0);printf(“n“);printf(“从顶点 0 开始的广度优先遍历:n“);BFS(G,0);printf(“n“);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报