深度优先遍历,这个跟树中的遍历类似,做深度遍历就是访问一个节点之后,在访问这个节点的子节点,依次下去是一个递归的过程。

具体代码:

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 9
  4: #define INFINITY 65535
  5:
  6: typedef struct MGraph
  7: {
  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的更多相关文章

  1. 图的深度优先遍历(DFS)和广度优先遍历(BFS)

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  2. 广度优先遍历-BFS、深度优先遍历-DFS

    广度优先遍历-BFS 广度优先遍历类似与二叉树的层序遍历算法,它的基本思想是:首先访问起始顶点v,接着由v出发,依次访问v的各个未访问的顶点w1 w2 w3....wn,然后再依次访问w1 w2 w3 ...

  3. 图的深度优先遍历DFS

    图的深度优先遍历是树的前序遍历的应用,其实就是一个递归的过程,我们人为的规定一种条件,或者说一种继续遍历下去的判断条件,只要满足我们定义的这种条件,我们就遍历下去,当然,走过的节点必须记录下来,当条件 ...

  4. 图的深度优先遍历(DFS)—递归算法

    实验环境:win10, DEV C++5.11 实验要求: 实现图的深度优先遍历 实验代码: #include <iostream> #define maxSize 255 #includ ...

  5. 图的深度优先遍历(DFS) c++ 非递归实现

    深搜算法对于程序员来讲是必会的基础,不仅要会,更要熟练.ACM竞赛中,深搜也牢牢占据着很重要的一部分.本文用显式栈(非递归)实现了图的深度优先遍历,希望大家可以相互学习. 栈实现的基本思路是将一个节点 ...

  6. 16.boost图深度优先遍历DFS

    #include <iostream> #include <boost/config.hpp> //图(矩阵实现) #include <boost/graph/adjac ...

  7. 图的深度优先遍历(DFS)和广度优先遍历(BFS)算法分析

    1. 深度优先遍历 深度优先遍历(Depth First Search)的主要思想是: 1.首先以一个未被访问过的顶点作为起始顶点,沿当前顶点的边走到未访问过的顶点: 2.当没有未访问过的顶点时,则回 ...

  8. C++版 - 剑指Offer 面试题39:二叉树的深度(高度)(二叉树深度优先遍历dfs的应用) 题解

    剑指Offer 面试题39:二叉树的深度(高度) 题目:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.例如:输入二叉树 ...

  9. 【C++】基于邻接矩阵的图的深度优先遍历(DFS)和广度优先遍历(BFS)

    写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...

随机推荐

  1. 转 linux之sed命令详解

    http://jingyan.baidu.com/article/fec4bce2228f60f2618d8bb0.html sed  编辑裁剪文件命令 sed -i "s/\/db\/te ...

  2. C# 写的正整数四则运算计算器

    实际上没能做出来负数.括号.小数的功能,才写这么个标题 大神直接略过,也欢迎指指点点-.- 输入一个四则运算表达式,计算出结果,想想不难,实现起来也不是很容易的. 流程:1.for循环输入的四则运算字 ...

  3. php-5.3源码编译autoconf版本不符合解法

    1. 网上下载符合版本的autoconf 2. 卸载本地原本的autoconf 3. 解压autoconf 后进入目录 ./configure && make && s ...

  4. leetcode126 Word Ladder II

    思路: 宽搜过程中分层记录路径,递归还原.实现: class Solution { public: void getPath(string now, string beginWord, string ...

  5. 内存溢出及Jvm监控工具

    内存泄露与内存溢出 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory. 内存泄露 memory leak,是指程序在申请内存后,无 ...

  6. python对象以及pickle腌制

    #python对象 1.什么是python的对象 2.详解pickle腌制 1.什么是python的对象 Python的内置的对象类型主要有数字.字符串.列表.元组.字典.集合等等.其实,在pytho ...

  7. 对SNL语言的解释器实现尾递归优化

    对于SNL语言解释器的内容可以参考我的前一篇文章<使用antlr4及java实现snl语言的解释器>.此文只讲一下"尾递归优化"是如何实现的--"尾递归优化& ...

  8. Server 2008 R2 事件查看器实现日志分析

    在 windows server 2008 R2 中,可以通过点击 "开始" -> "管理工具" -> "事件查看器" ,来打开 ...

  9. 【PostgreSQL-9.6.3】使用pg_settings表查看参数的生效条件

    PostgreSQL数据库的配置参数都在postgresql.conf文件中,此文件的目录为数据库的数据目录($PGDATA).这些参数有些是直接修改就可以生效,有些需要重启数据库才能生效,而有些根本 ...

  10. 2星|《约见投资人》:A股上市公司软文集

    约见资本人:58家上市公司创始人亲述创业之路 全书写了58个A股上市公司的故事,基本是宣传上市公司老总的软文.基本的套路是创始人历尽苦难创立了公司,取得了好业绩.最希望看的分析与数据几乎没有.看了一小 ...