实验环境:win10, DEV C++5.11

实验要求:

  实现图的深度优先遍历

实验代码:

#include <iostream>
#define maxSize 255
#include "stdlib.h"
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
/*the definition of struct*/
typedef struct ArcNode{
int adjvex;
struct ArcNode * nextarc;
int info;
}ArcNode;
typedef struct{
char data;
ArcNode *firstarc;
}VNode;
typedef struct{
VNode adjlist[maxSize];
int n,e;
}AGraph;
/*to create the adjoin graph*/
void createGraph(AGraph &G){
G.adjlist[].data='a';
G.adjlist[].data='b';
G.adjlist[].data='c';
G.adjlist[].data='d';
G.adjlist[].data='e';
G.adjlist[].data='f';
G.n=;
G.adjlist[].firstarc=(ArcNode *)malloc(sizeof(ArcNode));
G.adjlist[].firstarc->adjvex=;
G.adjlist[].firstarc->nextarc=(ArcNode *)malloc(sizeof(ArcNode));
G.adjlist[].firstarc->nextarc->adjvex=;
G.adjlist[].firstarc->nextarc->nextarc=NULL;
G.adjlist[].firstarc=(ArcNode *)malloc(sizeof(ArcNode));
G.adjlist[].firstarc->adjvex=;
G.adjlist[].firstarc->nextarc=(ArcNode *)malloc(sizeof(ArcNode));
G.adjlist[].firstarc->nextarc->adjvex=;
G.adjlist[].firstarc->nextarc->nextarc=NULL;
G.adjlist[].firstarc=(ArcNode *)malloc(sizeof(ArcNode));
G.adjlist[].firstarc->adjvex=;
G.adjlist[].firstarc->nextarc=(ArcNode *)malloc(sizeof(ArcNode));
G.adjlist[].firstarc->nextarc->adjvex=;
G.adjlist[].firstarc->nextarc->nextarc=(ArcNode *)malloc(sizeof(ArcNode));
G.adjlist[].firstarc->nextarc->nextarc->adjvex=;
G.adjlist[].firstarc->nextarc->nextarc->nextarc=NULL;
G.adjlist[].firstarc=(ArcNode *)malloc(sizeof(ArcNode));
G.adjlist[].firstarc->adjvex=;
G.adjlist[].firstarc->nextarc=(ArcNode *)malloc(sizeof(ArcNode));
G.adjlist[].firstarc->nextarc->adjvex=;
G.adjlist[].firstarc->nextarc->nextarc=(ArcNode *)malloc(sizeof(ArcNode));
G.adjlist[].firstarc->nextarc->nextarc->adjvex=;
G.adjlist[].firstarc->nextarc->nextarc->nextarc=NULL;
G.adjlist[].firstarc=(ArcNode *)malloc(sizeof(ArcNode));
G.adjlist[].firstarc->adjvex=;
G.adjlist[].firstarc->nextarc=(ArcNode *)malloc(sizeof(ArcNode));
G.adjlist[].firstarc->nextarc->adjvex=;
G.adjlist[].firstarc->nextarc->nextarc=(ArcNode *)malloc(sizeof(ArcNode));
G.adjlist[].firstarc->nextarc->nextarc->adjvex=;
G.adjlist[].firstarc->nextarc->nextarc->nextarc=NULL;
G.adjlist[].firstarc=(ArcNode *)malloc(sizeof(ArcNode));
G.adjlist[].firstarc->adjvex=;
G.adjlist[].firstarc->nextarc=NULL;
G.e=;
}
int isVisit[maxSize]={};
void visit(AGraph &G,int v){
printf("%c",G.adjlist[v].data);
}
/*deepth first search using recursive*/
void DFS(AGraph &G,int v){
ArcNode *p;
isVisit[v]=;
visit(G,v);
p=G.adjlist[v].firstarc;
while(p!=NULL){
if(isVisit[p->adjvex]==)
DFS(G,p->adjvex);
p=p->nextarc;
}
}
//for finding the adjoin arc of the vertex
//void searchG(AGraph &G,int i){
// ArcNode * p=G.adjlist[i].firstarc;
// while(p!=NULL){
// printf("%c",G.adjlist[p->adjvex].data);
// p=p->nextarc;
// }
//}
int main(int argc, char** argv) {
AGraph G;
createGraph(G);
//searchG(G,1);
printf("the deepth searth using recursive:\n");
DFS(G,);
getchar();
return ;
}

运行结果:

图的深度优先遍历(DFS)—递归算法的更多相关文章

  1. 图的深度优先遍历DFS

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

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

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

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

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

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

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

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

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

  6. 数据结构——图的深度优先遍历(邻接矩阵表示+java版本)

    ​1.深度优先遍历(DFS) 图的深度优先遍历本质上是一棵树的前序遍历(即先遍历自身,然后遍历其左子树,再遍历右子树),总之图的深度优先遍历是一个递归的过程. 如下图所示,左图是一个图,右图是图的深度 ...

  7. PTA 邻接矩阵存储图的深度优先遍历

    6-1 邻接矩阵存储图的深度优先遍历(20 分) 试实现邻接矩阵存储图的深度优先遍历. 函数接口定义: void DFS( MGraph Graph, Vertex V, void (*Visit)( ...

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

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

  9. 图论 - 图的深度优先遍历c++实现

    图的深度优先遍历c++实现 深度优先搜索 邻接矩阵的创建 int i, j, m, a, b; cin >> n >> m; //初始化二维矩阵 for (i = 1; i & ...

随机推荐

  1. 在电脑端同时安装Python2,Python3

    参考文档:http://www.cnblogs.com/zhengyihan1216/p/6011640.html 重点: 1.安装路径最好在一起,方便管理 2.安装路径下不建议有空格 3.Pytho ...

  2. eclipse里没有j2ee

    eclipse是客户端开发工具,本来就不带有j2ee的jar包,需要容器:比如tomcat来提供这个jar的.j2EE通用jar包列表:IKIKAnalyzer3.2.8.jar // 分词器ant- ...

  3. 原生Android 注意事项

    如果要访问 互联网上的json数据的话 就要在 该目录下添加 访问的权限: <uses-permission android:name="android.permission.INTE ...

  4. Altium designer 新建快捷键

    示例: 1.按下Ctrl: 2.点击需要建立快捷键的图标:点击交互式布线图标,然后在选择性输入要用到的快捷键:

  5. springboot使用redisTemplate遇到的问题

    概述 最近工作中新构建了一个项目,用的springboot,由于项目中要使用各种各样的缓存,就使用了spring-data-redis,这个东西比我想象中要难使用的多啊,而且我还遇到个问题,就是在用R ...

  6. ng-model-options 时延

    ng-model-options="{updateOn: 'blur'}" 失去焦点时生效 ng-model-options="{debounce:500}" ...

  7. 团队作业4——beta冲刺

    beta冲刺准备 冲刺准备 5天冲刺博客 Beta冲刺一 Beta冲刺二 Beta冲刺三 Beta冲刺四 Beta冲刺五 用户使用报告 用户使用用报告 冲刺总结 冲刺总结随笔 项目码云地址 码云地址

  8. 一个redis因为关闭快照无法连接的BUG

    [2018-04-19 11:00:08,587: ERROR/MainProcess] consumer: Cannot connect to redis://127.0.0.1:6379/0: M ...

  9. MYSQL+PHP的学习之路

    MYSQL+PHP 先从MYSQL开始吧 第一步:SQL语句基础 1.书籍 2.网站: 这个网站在线测试和考试http://sqlzoo.net/wiki/SELECT_basics/zh 3.学习过 ...

  10. 【C#】await & Result DeadLock

    随意使用异步的await和Result,被弄得欲仙欲死,然后看了 Don't Block on Async Code,稍许明白,翻译然后加上自己的理解以加深印象. 会死锁的两个例子 UI例子 publ ...