图的深度优先遍历DFS(邻接矩阵表示法)

简介:

1.前言

期末复习算法,第三章讲到了图,所以想将课本中的算法实现。当写完代码的时候才发现这样的复习效率太低了,看书复习是复习,写代码是写代码。不过写完以后还是有点成就感的。

2.参考文献

http://blog.csdn.net/lengyuhong/archive/2010/01/06/5145100.aspx

3.代码实现

[c-sharp]  view plain copy print ?
  1. #include<iostream>  
  2. #include<malloc.h>  
  3. using namespace std;  
  4.  
  5. #define maxNum 100 //定义邻接举证的最大定点数  
  6. int visited[maxNum];//通过visited数组来标记这个顶点是否被访问过,0表示未被访问,1表示被访问  
  7.   
  8. //图的邻接矩阵表示结构  
  9. typedef struct  
  10. {  
  11.     char v[maxNum];//图的顶点信息  
  12.     int e[maxNum][maxNum];//图的顶点信息  
  13.     int vNum;//顶点个数  
  14.     int eNum;//边的个数  
  15. }graph;  
  16.   
  17. void createGraph(graph *g);//创建图g  
  18. void DFS(graph *g);//深度优先遍历图g  
  19.   
  20. void dfs(graph *g,int i)  
  21. {  
  22.     //cout<<"顶点"<<g->v[i]<<"已经被访问"<<endl;  
  23.     cout<<"顶点"<<i<<"已经被访问"<<endl;  
  24.     visited[i]=1;//标记顶点i被访问  
  25.     for(int j=0;j<g->vNum;j++)  
  26.     {  
  27.         if(g->e[i][j]!=0&&visited[j]==0)  
  28.             dfs(g,j);  
  29.     }  
  30. }  
  31.   
  32. void DFS(graph *g)  
  33. {  
  34.     int i;  
  35.     //初始化visited数组,表示一开始所有顶点都未被访问过  
  36.     for(i=0;i<g->vNum;i++)  
  37.         visited[i]=0;  
  38.     //深度优先搜索  
  39.     for(i=0;i<g->vNum;i++)  
  40.         if(visited[i]==0)//如果这个顶点为被访问过,则从i顶点出发进行深度优先遍历  
  41.             dfs(g,i);  
  42. }  
  43.   
  44. void createGraph(graph *g)//创建图g  
  45. {  
  46.     cout<<"正在创建无向图..."<<endl;  
  47.     cout<<"请输入顶点个数vNum:";  
  48.     cin>>g->vNum;  
  49.     cout<<"请输入边的个数eNum:";  
  50.     cin>>g->eNum;  
  51.     int i,j;  
  52.   
  53.     //输入顶点信息  
  54.     //cout<<"请输入顶点信息:"<<endl;  
  55.     //for(i=0;i<g->vNum;i++)  
  56.     //  cin>>g->v[i];  
  57.   
  58.     //初始画图g  
  59.     for(i=0;i<g->vNum;i++)  
  60.         for(j=0;j<g->vNum;j++)  
  61.             g->e[i][j]=0;  
  62.   
  63.     //输入边的情况  
  64.     cout<<"请输入边的头和尾"<<endl;  
  65.     for(int k=0;k<g->eNum;k++)  
  66.     {  
  67.         cin>>i>>j;  
  68.         g->e[i][j]=1;  
  69.         g->e[j][i]=1;  
  70.     }  
  71. }  
  72.   
  73. int main()  
  74. {  
  75.     graph *g;  
  76.     g=(graph*)malloc(sizeof(graph));  
  77.     createGraph(g);  
  78.     DFS(g);  
  79.     int i;  
  80.     cin>>i;  
  81.     return 0;  
  82. }  
  83.   
  84. /* 
  85. 输入: 
  86. 正在创建无向图... 
  87. 请输入顶点个数vNum:10 
  88. 请输入边的个数eNum:9 
  89. 请输入边的头和尾 
  90. 0 1 
  91. 0 3 
  92. 1 4 
  93. 1 5 
  94. 3 6 
  95. 4 8 
  96. 5 2 
  97. 6 7 
  98. 8 9 
  99. */  



本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2011/06/11/2297009.html,如需转载请自行联系原作者

目录
相关文章
|
消息中间件 分布式计算 大数据
大数据面经 字节跳动 (整理)
大数据面经 字节跳动 (整理)
541 0
各个国家缩写域名后缀列表(全球)
不同的国家分属不同的国家后缀域名,例如中国的国家后缀域名为- .cn,云吞铺子分享全球各个国家的国家域名后缀表: 国家域名后缀列表 以下国家的域名,按照域名缩写的字母排序: A .ac 亚森松岛 .
30089 0
|
6月前
|
人工智能 自然语言处理 IDE
通义灵码正式上线 Qwen3,编程智能体马上来了!
Qwen3正式发布并开源8款「混合推理模型」,包括两款MoE模型(Qwen3-235B-A22B、Qwen3-30B-A3B)和六个Dense模型。旗舰模型Qwen3-235B-A22B在多项测试中表现出色,竞争力强。Qwen3支持两种思考模式(思考与非思考),涵盖119种语言,增强Agent能力,在BFCL评测中创纪录。通义灵码已上线相关插件,助力开发者体验AI编码能力。
941 11
|
缓存 Java 数据库连接
mybatis复习05,mybatis的缓存机制(一级缓存和二级缓存及第三方缓存)
文章介绍了MyBatis的缓存机制,包括一级缓存和二级缓存的配置和使用,以及如何整合第三方缓存EHCache。详细解释了一级缓存的生命周期、二级缓存的开启条件和配置属性,以及如何通过ehcache.xml配置文件和logback.xml日志配置文件来实现EHCache的整合。
mybatis复习05,mybatis的缓存机制(一级缓存和二级缓存及第三方缓存)
|
8月前
|
SQL 大数据 HIVE
hive聚合函数多行合并
通过本文,我们详细介绍了Hive中几种常见的聚合函数及其在多行合并中的具体应用。这些聚合函数在处理和分析大数据时非常有用,可以帮助我们高效地进行数据汇总和处理。希望本文对您的学习和工作有所帮助。
380 13
|
移动开发 JSON JavaScript
一篇文章讲明白Egret白鹭H5小游戏开发入门(一)
一篇文章讲明白Egret白鹭H5小游戏开发入门(一)
246 1
|
存储 缓存 前端开发
Java八股文面试之多线程篇
Java八股文面试之多线程篇
472 0
Java八股文面试之多线程篇
|
NoSQL MongoDB 数据库
【MongoDB 专栏】MongoDB 的并发控制与锁机制
【5月更文挑战第11天】MongoDB的并发控制和锁机制保证数据一致性和性能。全局锁用于特殊情况如数据库初始化,限制并发性能;文档级锁提供更高的并发性,针对单个文档锁定。乐观并发控制利用版本号检查减少锁竞争。在分布式环境下,需协调多节点锁,优化包括合理设计数据模型、调整锁配置和利用分布式事务。未来,MongoDB将持续改进这些机制以应对复杂需求。了解并发控制原理对于数据库开发者至关重要。
570 2
【MongoDB 专栏】MongoDB 的并发控制与锁机制
|
存储 SQL 分布式计算
数据湖架构及概念简介
本文整理自阿里云开源大数据技术专家陈鑫伟在7月17日阿里云数据湖技术专场交流会的分享。
3849 0
数据湖架构及概念简介
|
定位技术 数据安全/隐私保护
3分钟部署 我的世界(Minecraft) 联机服务
如何通过计算巢快速部署《我的世界(Minecraft)》联机服务
3分钟部署 我的世界(Minecraft) 联机服务