测试时用的图是,可以使用其他类型的图代替。

graph.h
#ifndef GRAPH_H_INCLUDED
#define GRAPH_H_INCLUDED#define MAXV 100                //最大顶点个数
#define INF 32767       //INF表示∞
typedef int InfoType;//以下定义邻接矩阵类型
typedef struct
{int no;                     //顶点编号InfoType info;              //顶点其他信息,在此存放带权图权值
} VertexType;                   //顶点类型typedef struct                  //图的定义
{int edges[MAXV][MAXV];      //邻接矩阵int n,e;                    //顶点数,弧数VertexType vexs[MAXV];      //存放顶点信息
} MGraph;                       //图的邻接矩阵类型
//以下定义邻接表类型
typedef struct ANode            //弧的结点结构类型
{int adjvex;                 //该弧的终点位置struct ANode *nextarc;      //指向下一条弧的指针InfoType info;              //该弧的相关信息,这里用于存放权值
} ArcNode;typedef int Vertex;typedef struct Vnode            //邻接表头结点的类型
{Vertex data;                //顶点信息int count;                  //存放顶点入度,只在拓扑排序中用ArcNode *firstarc;          //指向第一条弧
} VNode;typedef VNode AdjList[MAXV];    //AdjList是邻接表类型typedef struct
{AdjList adjlist;            //邻接表int n,e;                    //图中顶点数n和边数e
} ALGraph;                      //图的邻接表类型
void ArrayToList(int *Arr, int n, ALGraph *&); //用普通数组构造图的邻接表
#endif // GRAPH_H_INCLUDEDgraph.cpp
#include <stdio.h>
#include <malloc.h>
#include "graph.h"
//功能:由一个反映图中顶点邻接关系的二维数组,构造出用邻接矩阵存储的图
//参数:Arr - 数组名,由于形式参数为二维数组时必须给出每行的元素个数,在此将参数Arr声明为一维数组名(指向int的指针)
//      n - 矩阵的阶数
//      g - 要构造出来的邻接矩阵数据结构
void ArrayToList(int *Arr, int n, ALGraph *&G)
{int i,j,count=0;  //count用于统计边数,即矩阵中非0元素个数ArcNode *p;G=(ALGraph *)malloc(sizeof(ALGraph));G->n=n;for (i=0; i<n; i++)                 //给邻接表中所有头节点的指针域置初值G->adjlist[i].firstarc=NULL;for (i=0; i<n; i++)                 //检查邻接矩阵中每个元素for (j=n-1; j>=0; j--)if (Arr[i*n+j]!=0)      //存在一条边,将Arr看作n×n的二维数组,Arr[i*n+j]=Arr[i][j](n是有多少列){p=(ArcNode *)malloc(sizeof(ArcNode));   //创建一个节点*pp->adjvex=j;p->info=Arr[i*n+j];p->nextarc=G->adjlist[i].firstarc;      //采用头插法插入*p,和链表的操作一样G->adjlist[i].firstarc=p;}G->e=count;
}
main.cpp
#include <stdio.h>
#include <malloc.h>
#include "graph.h"
int visited[MAXV];
void DFS(ALGraph *G, int v)
{ArcNode *p;int w;visited[v]=1;printf("%d ", v);p=G->adjlist[v].firstarc;while (p!=NULL){w=p->adjvex;if (visited[w]==0)DFS(G,w);p=p->nextarc;}
}
int main()
{int i;ALGraph *G;int A[5][5]={{0,1,0,1,0},{1,0,1,0,0},{0,1,0,1,1},{1,0,1,0,1},{0,0,1,1,0}};ArrayToList(A[0], 5, G);for(i=0; i<MAXV; i++) visited[i]=0;printf(" 由2开始深度遍历:");DFS(G, 2);printf("\n");for(i=0; i<MAXV; i++) visited[i]=0;printf(" 由0开始深度遍历:");DFS(G, 0);printf("\n");return 0;
}

第十一周项目实践3 DFS(深度优先搜索)的基本模板相关推荐

  1. 第十一周项目实践4 BFS(广度优先搜索)基本模板

    测试时用的图是,可以使用其他类型的图代替. graph.h #ifndef GRAPH_H_INCLUDED #define GRAPH_H_INCLUDED#define MAXV 100 //最大 ...

  2. 第十一周项目实践2 用邻接表存储的图来实现基本应用

    假设图G采用邻接表存储,分别设计实现以下要求的算法:  (1)输出出图G中每个顶点的出度:  (2)求出图G中出度最大的一个顶点,输出该顶点编号:  (3)计算图G中出度为0的顶点数:  (4)判断图 ...

  3. 第十一周项目实践1 图基本算法库

    #ifndef GRAPH_H_INCLUDED #define GRAPH_H_INCLUDED#define MAXV 100 //最大顶点个数 #define INF 32767 //INF表示 ...

  4. “暴力美学1”——DFS深度优先搜索

    作为新时代青年,"暴力"二字似乎离我们十分遥远,大多数时候我们只能够在电影或者电视剧上接触这个概念 暴力二字或许是个贬义词,但若是我们在后面加上美学二字,或许就是一个值得推敲的词汇 ...

  5. DFS(深度优先搜索)算法实现

    2 DFS算法 DFS(深度优先搜索)算法,搜索过程是类似于不撞南墙不回头的意思,DFS一般使用堆栈(先入后出)这种数据结构实现,由此一来,以初始起点为中心进行搜索,首先是周围点加入到堆栈中,起始点搜 ...

  6. 图:DFS(深度优先搜索)图解分析代码实现

    文章目录 一.简介 二.图的建立 2.1建立图类 2.2建立图 三.DFS 3.1图解 3.2代码 一.简介 图的DFS(深度优先搜索)与BFS(广度优先搜索)是图的两种遍历方式. 主要区别在于当到达 ...

  7. DFS——深度优先搜索基础

    [0]README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在 review DFS--深度优先搜索 的基础知识: [1]深度优先搜索的应用 1.1)深度优先搜索算法描述(转自 ...

  8. 【算法】蓝桥杯dfs深度优先搜索之排列组合总结

    [导航] 上一篇文章 → <[算法]蓝桥杯dfs深度优先搜索之凑算式总结>   为了重申感谢之意,再次声明下文的大部分灵感均来自于[CSDN]梅森上校<JAVA版本:DFS算法题解两 ...

  9. dfs深度优先搜索_图的深度优先搜索(DFS)

    dfs深度优先搜索 Depth First Search (DFS) is an algorithm that searches a graph/tree, in a depth-wise manne ...

最新文章

  1. Python模拟微博登陆,亲测有效!
  2. 操作系统课程设计--使用多线程模拟时间片轮转法调度
  3. windows下线程创建
  4. 【转】误差矩阵(混淆矩阵)评价法
  5. 创建mysql视图语法正确的是_MySQL创建视图的语法格式
  6. 使用Google OAuth 2.0存取Google API (Google Client ID)
  7. 动态时间规整算法(DTW)通俗易懂
  8. 水很深的深度学习-Task01深度学习概述与数学基础
  9. c+mysql主从切换_mysql主从配置
  10. idea 安装Vue插件 超详细
  11. Facebook广告有哪些有效策略呢?
  12. 纵横捭阖C++之从异步谈起
  13. SEEDLab ARP Cache Poisoning Attack Lab 实验报告
  14. 爱你的人和你爱的人 你选哪个?
  15. jasper 引入字体_MAC下JasperStudio创建及引用字体
  16. 【VMware】下安装OSX10.10-Yosemite【Mac】系统
  17. 书生笔记-binlog 的写入机制
  18. 随着我国经济的持续快速发展,城市轻物流需求大幅增长
  19. 一款练习汇编的神器——DosBox
  20. Java小技能:异常处理

热门文章

  1. 2410Init.s
  2. 光脚丫学LINQ(002):筛选数据
  3. Android系统编译so库提示error undefined reference to '__android_log_print问题的解决
  4. USB学习5---android usb驱动源代码目录说明
  5. Android中常见的MVC模式
  6. python调用api应用接口_第三方免费快递物流查询接口平台(快递鸟)api接口调用...
  7. MySQL:Innodb DB_ROLL_PTR指针解析
  8. 《C++入门经典(第6版)》——1.5 问与答
  9. 登录环境故障的原理及解决办法? -bash-4.1$ -bash-4.1$
  10. Codeforces Divisibility【水题】