第十二周项目3-图遍历算法实现

原创 2016年11月18日 11:04:40
  1. /*    
  2. Copyright (c)2016,烟台大学计算机与控制工程学院    
  3. All rights reserved.    
  4. 文件名称:第十二周项目3 - 图遍历算法实现.cpp    
  5. 作    者:朱建豪    
  6. 完成日期:2016年11月18日    
  7. 版 本 号:v1.0    
  8.     
  9. 问题描述: 实现图遍历算法,分别输出如下图结构的深度优先(DFS)遍历序列和广度优先遍历(BFS)序列。     
  10. 输入描述: 若干测试数据。    
  11. 程序    


深度优先遍历(DFS):

源文件代码:

[cpp] view plain copy
  1. #include"head.h"    
  2. extern visited[MAXV];    
  3. void DFS(ALGraph *G, int v)    
  4. {    
  5.     ArcNode *p;    
  6.     int w;    
  7.     visited[v]=1;    
  8.     printf("%d ", v);    
  9.     p=G->adjlist[v].firstarc;    
  10.     while (p!=NULL)    
  11.     {    
  12.         w=p->adjvex;    
  13.         if (visited[w]==0)    
  14.             DFS(G,w);    
  15.         p=p->nextarc;    
  16.     }    
  17. }    
主函数代码:

[cpp] view plain copy
  1. #include"head.h"    
  2. int visited[MAXV];    
  3. int main()    
  4. {    
  5.     int i;    
  6.     ALGraph *G;    
  7.     int A[5][5]=    
  8.     {    
  9.         {0,1,0,1,0},    
  10.         {1,0,1,0,0},    
  11.         {0,1,0,1,1},    
  12.         {1,0,1,0,1},    
  13.         {0,0,1,1,0}    
  14.     };    
  15.     ArrayToList(A[0], 5, G);    
  16.     
  17.     for(i=0; i<MAXV; i++)     
  18.         visited[i]=0;    
  19.     printf(" 由2开始深度遍历:");    
  20.     DFS(G, 2);    
  21.     printf("\n");    
  22.     
  23.     for(i=0; i<MAXV; i++)     
  24.         visited[i]=0;    
  25.     printf(" 由0开始深度遍历:");    
  26.     DFS(G, 0);    
  27.     printf("\n");    
  28.     return 0;    
  29. }    
运行结果:

广度优先遍历(BFS):

源文件代码:

[cpp] view plain copy
  1. #include"head.h"    
  2. extern visited[MAXV];    
  3. void BFS(ALGraph *G, int v)    
  4. {    
  5.     ArcNode *p;    
  6.     int w,i;    
  7.     int queue[MAXV],front=0,rear=0; //定义循环队列    
  8.     int visited[MAXV];     //定义存放节点的访问标志的数组    
  9.     for (i=0; i<G->n; i++) visited[i]=0; //访问标志数组初始化    
  10.     printf("%2d",v);            //输出被访问顶点的编号    
  11.     visited[v]=1;                       //置已访问标记    
  12.     rear=(rear+1)%MAXV;    
  13.     queue[rear]=v;              //v进队    
  14.     while (front!=rear)         //若队列不空时循环    
  15.     {    
  16.         front=(front+1)%MAXV;    
  17.         w=queue[front];             //出队并赋给w    
  18.         p=G->adjlist[w].firstarc;   //找w的第一个的邻接点    
  19.         while (p!=NULL)    
  20.         {    
  21.             if (visited[p->adjvex]==0)    
  22.             {    
  23.                 printf("%2d",p->adjvex); //访问之    
  24.                 visited[p->adjvex]=1;    
  25.                 rear=(rear+1)%MAXV; //该顶点进队    
  26.                 queue[rear]=p->adjvex;    
  27.             }    
  28.             p=p->nextarc;       //找下一个邻接顶点    
  29.         }    
  30.     }    
  31.     printf("\n");    
  32. }    
主函数代码:

[cpp] view plain copy
  1. #include"head.h"    
  2. int visited[MAXV];    
  3.     
  4. int main()    
  5. {    
  6.     ALGraph *G;    
  7.     int A[5][5]=    
  8.     {    
  9.         {0,1,0,1,0},    
  10.         {1,0,1,0,0},    
  11.         {0,1,0,1,1},    
  12.         {1,0,1,0,1},    
  13.         {0,0,1,1,0}    
  14.     };    
  15.     ArrayToList(A[0], 5, G);    
  16.     
  17.     printf(" 由2开始广度遍历:");    
  18.     BFS(G, 2);    
  19.     
  20.     printf(" 由0开始广度遍历:");    
  21.     BFS(G, 0);    
  22.     return 0;    
  23. }    

运行结果:


知识点总结:

DFS和BFS的算法实现。

深度优先遍历与广度优先遍历(c++二叉树算法实现)

1.深度优先遍历的递归定义   假设给定图G的初态是所有顶点均未曾访问过。在G中任选一顶点v为初始出发点(源点),则深度优先遍历可定义如下:首先访问出发点v,并将其标记为已访问过;然后依次从v出...
  • helloworldding
  • helloworldding
  • 2017年01月10日 22:18
  • 1340

二叉树构建,先序,中序,后序遍历(以及非递归实现),广度优先遍历

二叉树是一类简单而又重要的树形结构,在数据的排序、查找和遍历方面有着广泛的应用。由于其清晰的结构,简单的逻辑,广泛的应用和大量的指针操作,在面试过程屡见不鲜,快被面试官玩坏了。相关的问题在百行代码内就...
  • K346K346
  • K346K346
  • 2016年03月24日 21:25
  • 4309

二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]

二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ] Posted on 2013-02-03 12:52 fancydeepin 阅读(3341) 评论(0)  编辑  收藏 所属分类: 数据...
  • xcysuccess3
  • xcysuccess3
  • 2014年03月26日 14:36
  • 8368

第十二周 项目3 - 图遍历算法实现

/*                Copyright (c)2016,烟台大学计算机与控制工程学院                All rights reserved.            ...
  • qq_35999126
  • qq_35999126
  • 2016年11月24日 10:21
  • 75

第十二周项目3 图遍历算法实现(2)

问题与代码
  • scmpart
  • scmpart
  • 2015年11月27日 08:39
  • 169

第十二周项目3——图遍历算法实现

问题及代码 /* * Copyright (c)2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:项目3.cpp ...
  • chendi19
  • chendi19
  • 2016年11月16日 21:04
  • 76

第十二周 项目3 图遍历算法实现

/* * 烟台大学计算机与控制工程学院 *文件名称:mian.cpp *作 者:王旭 *完成日期:2015年1...
  • Wang_Xu_
  • Wang_Xu_
  • 2015年11月16日 17:26
  • 276

第十二周项目3-图遍历算法的实现

/* Copyright (c)2015,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:第十二周项目3 - 图遍历算法实现.cpp 作 者:高露 完...
  • GL906376500
  • GL906376500
  • 2015年11月30日 16:32
  • 214

第十二周项目3 图的遍历算法实现

问题及代码: /*  * Copyright (c)2016,烟台大学计算机与控制工程学院  * All rights reserved.  * 文件名称:zhou.cpp  *...
  • snow0617
  • snow0617
  • 2016年11月24日 10:59
  • 102

第十二周项目3--图遍历算法实现

问题及代码: /* *Copyright(c) 2015, 烟台大学计算机学院 *All rights reserved. *文件名称:图的遍历.cpp *作 者:杜文...
  • dwwkb
  • dwwkb
  • 2015年11月20日 08:46
  • 137
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第十二周项目3-图遍历算法实现
举报原因:
原因补充:

(最多只允许输入30个字)