深度优先遍历DFS
深度优先遍历,这个跟树中的遍历类似,做深度遍历就是访问一个节点之后,在访问这个节点的子节点,依次下去是一个递归的过程。
具体代码:
void DFS(MGraph g ,int i)
{
int j;
visited[i]=1;
printf("%c",g.vexs[i]);
for(j = 0;j<g.numVertexes;j++)
{
if(g.arc[i][j]==1&&visited[i]!=1)
{
DFS(g,j);
}
}
}
完整代码如下,这边对图的存储结构采用了邻接矩阵
1: #include <stdio.h>2:3: #define MAXVEX 94: #define INFINITY 655355:6: typedef struct MGraph7: {8: char vexs[MAXVEX];9: int arc[MAXVEX][MAXVEX];10: int numVertexes, numEdges;11: }MGraph;12:13: int visited[MAXVEX];14:15: void createMGraph(MGraph *g);16: void DFS(MGraph g ,int i);17: void DFSTraverse(MGraph g);18:19: void createMGraph(MGraph *g)20: {21: int i, j;22:23: g->numEdges=15;24: g->numVertexes=9;25:26: g->vexs[0]='A';27: g->vexs[1]='B';28: g->vexs[2]='C';29: g->vexs[3]='D';30: g->vexs[4]='E';31: g->vexs[5]='F';32: g->vexs[6]='G';33: g->vexs[7]='H';34: g->vexs[8]='I';35:36:37: for (i = 0; i < g->numVertexes; i++)38: {39: for ( j = 0; j < g->numVertexes; j++)40: {41: g->arc[i][j]=0;42: }43: }44:45: g->arc[0][1]=1;46: g->arc[0][5]=1;47:48: g->arc[1][2]=1;49: g->arc[1][8]=1;50: g->arc[1][6]=1;51:52: g->arc[2][3]=1;53: g->arc[2][8]=1;54:55: g->arc[3][4]=1;56: g->arc[3][7]=1;57: g->arc[3][6]=1;58: g->arc[3][8]=1;59:60: g->arc[4][5]=1;61: g->arc[4][7]=1;62:63: g->arc[5][6]=1;64:65: g->arc[6][7]=1;66:67:68: for(i = 0; i < g->numVertexes; i++)69: {70: for(j = i; j < g->numVertexes; j++)71: {72: g->arc[j][i] =g->arc[i][j];73: }74: }75:76: }77:78:79: void DFS(MGraph g ,int i)80: {81: int j;82: visited[i]=1;83: printf("%c",g.vexs[i]);84: for(j = 0;j<g.numVertexes;j++)85: {86: if(g.arc[i][j]==1&&visited[i]!=1)87: {88: DFS(g,j);89: }90: }91: }92:93: void DFSTraverse(MGraph g)94: {95: int i;96: for(i=0;i<g.numVertexes;i++)97: {98: visited[i] = 0;99: }100: for(i = 0;i<g.numVertexes;i++)101: {102: if(visited[i]!=1)103: {104: DFS(g,i);105: }106: }107: }108:109: int main()110: {111: MGraph g;112: createMGraph(&g);113: DFSTraverse(g);114: return 0;115: }116:
深度优先遍历DFS的更多相关文章
- 图的深度优先遍历(DFS)和广度优先遍历(BFS)
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- 广度优先遍历-BFS、深度优先遍历-DFS
广度优先遍历-BFS 广度优先遍历类似与二叉树的层序遍历算法,它的基本思想是:首先访问起始顶点v,接着由v出发,依次访问v的各个未访问的顶点w1 w2 w3....wn,然后再依次访问w1 w2 w3 ...
- 图的深度优先遍历DFS
图的深度优先遍历是树的前序遍历的应用,其实就是一个递归的过程,我们人为的规定一种条件,或者说一种继续遍历下去的判断条件,只要满足我们定义的这种条件,我们就遍历下去,当然,走过的节点必须记录下来,当条件 ...
- 图的深度优先遍历(DFS)—递归算法
实验环境:win10, DEV C++5.11 实验要求: 实现图的深度优先遍历 实验代码: #include <iostream> #define maxSize 255 #includ ...
- 图的深度优先遍历(DFS) c++ 非递归实现
深搜算法对于程序员来讲是必会的基础,不仅要会,更要熟练.ACM竞赛中,深搜也牢牢占据着很重要的一部分.本文用显式栈(非递归)实现了图的深度优先遍历,希望大家可以相互学习. 栈实现的基本思路是将一个节点 ...
- 16.boost图深度优先遍历DFS
#include <iostream> #include <boost/config.hpp> //图(矩阵实现) #include <boost/graph/adjac ...
- 图的深度优先遍历(DFS)和广度优先遍历(BFS)算法分析
1. 深度优先遍历 深度优先遍历(Depth First Search)的主要思想是: 1.首先以一个未被访问过的顶点作为起始顶点,沿当前顶点的边走到未访问过的顶点: 2.当没有未访问过的顶点时,则回 ...
- C++版 - 剑指Offer 面试题39:二叉树的深度(高度)(二叉树深度优先遍历dfs的应用) 题解
剑指Offer 面试题39:二叉树的深度(高度) 题目:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.例如:输入二叉树 ...
- 【C++】基于邻接矩阵的图的深度优先遍历(DFS)和广度优先遍历(BFS)
写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...
随机推荐
- Enumerable.Union<TSource> 方法
功能:生成两个序列的并集(使用默认的相等比较器). 命名空间: System.Linq 程序集: System.Core.dll 备注:实现此方法时使用了延迟执行. 它直接返回一个对象,该对象存储了执 ...
- SVN服务器搭建 内网可用外网不可用的问题
检查1:内网端口映射到了外网端口,这样外网才能够访问到 映射的方式有两种: 1.通过路由器的虚拟服务器功能,网上一搜一大把. 2.将路由器的DMZ功能开启,并把DMZ主机设置为目标计算机. 检查2:S ...
- Spring.Net学习笔记(二)-数据访问器
Spring对ADO.NET也提供了支持,依赖与程序集Spring.Data.dll IDbProvider IDbProvider定义了数据访问提供器的基础,配置如下 <?xml versio ...
- 为什么我的对象被 IntelliJ IDEA 悄悄的修改了?
背景 最近,在复习JUC的时候调试了一把ConcurrentLinkedQueue的offer方法,意外的发现Idea在debug模式下竟然会 "自动修改" 已经创建的Ja ...
- 【hive】hive表很大的时候查询报错问题
线上hive使用环境出现了一个奇怪的问题,跑一段时间就报如下错误: FAILED: SemanticException MetaException(message:Exception thrown w ...
- 【原创】利用doxygen来管理项目文档或注释
一.doxygen应用场景: doxygen可以用来管理目前主流的编程语言的注释而形成文档系统.(包括C, C++, C#, Objective-C, IDL, Java, VHDL, PHP, Py ...
- [Windows Server 2012] MySQL更改数据库引擎(MyISAM改为INNODB)
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:更改MyS ...
- DB2 系统命令与配置参数大全
主要包括4个部分,分别为: DB2 系统命令 DB2 数据库管理器配置参数 DB2 数据库系统配置参数 DB2 管理服务器(DAS)配置参数DB2 系统命令 dasauto - 自动启动 DB2 管理 ...
- 世界上最受欢迎的10个Linux发行版
帮助新的Linux用户在越来越多的Linux发行版中选择最合适的操作系统,是创建这个网页的原因.它列出了迄今为止最流行的10个Linux发行版(另外增加的是FreeBSD,到目前为止最为流行的BSD系 ...
- 比较常见的几种代理ip类型
1.HTTP代理服务器 代理服务器英文全称是Proxy Server,他的功能就是代理网络用户去获得网络信息.形象点说:就是网络信息的中转站.通常情况下,网络浏览器直接去连接其他Internet站点取 ...