实验环境: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. 怎样用div做三角形

    20181204 用盒子模型做三角形的效果: <div></div> width:0px; height:0px; border:10px solid red; border- ...

  2. swiper 不同页面高度自适应

    在使用swiper写页面滑动时发现不同页面高度无法自适应,使用autoHeight:true也不起作用 研究了一下发现可以这样设置 .swiper-slide{ overflow: hidden; } ...

  3. 软件151 王楚博 maven的导入

    一.maven 包的导入 清单如下: <!-- Inherit defaults from Spring Boot --> <parent> <groupId>or ...

  4. mybatis调用存储过程,获取返回的游标

    将调用存储过程参数放入map中,由于返回的游标中包含很多参数,所以再写一个resultmap与之对应,类型为hashmap.设置返回的jdbcType=CURSOR,resultMap设置为id对应的 ...

  5. Python——字符串、文件操作,英文词频统计预处理

    一.字符串操作: 解析身份证号:生日.性别.出生地等. 凯撒密码编码与解码 网址观察与批量生成 2.凯撒密码编码与解码 凯撒加密法的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左 ...

  6. dom编程艺术笔记1--第二章

    第二章语法部分: 1.js注释:<!-- XXXXX 而“-->”这部分js会认为是注释内容的一部分 2.var 声明变量 不用声明变量类型 3.声明使用一个数组语法:var object ...

  7. 练习 map集合被使用是因为具备映射关系 "进度班" "01" "张三" "进度班" "02" "李四" "J1701" "01" "王五" "J1701" "02" "王二" 此信息中,我们要怎样把上述信息装入集合中, 根据班级信息的到所有的所有信

    package com.rf.xs; import java.util.Arrays; public class Student01 { String name; int age; public St ...

  8. java中的异常处理问题。

    异常处理--基本概念 当出现程序无法控制的外部环境问题(用户提供的文件不存在,文件内容损坏,网络不可用...)时,JAVA就会用异常对象来描述. java中用2种方法处理异常: 1.在发生异常的地方直 ...

  9. 纯css实现评分

    用到的知识点: E:checked:单选或复选框被选中 E ~ F: 选择后面的兄弟节点们:选择后面的兄弟节点 E::after,E::before: 伪元素选择器 在匹配E的元素后面(前面)插入内容 ...

  10. Ionic 2 + 手动搭建开发环境教程 【转】

    ionic简介 为什么选用ionic: 彻底开源且免费 性能优异 基于红的发紫的AngularJs 漂亮的UI 强大的命令行(基于更热门的nodejs) 开发团队非常活跃. ngCordova,将主流 ...