第十一周项目实践3 DFS(深度优先搜索)的基本模板
测试时用的图是,可以使用其他类型的图代替。
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(深度优先搜索)的基本模板相关推荐
- 第十一周项目实践4 BFS(广度优先搜索)基本模板
测试时用的图是,可以使用其他类型的图代替. graph.h #ifndef GRAPH_H_INCLUDED #define GRAPH_H_INCLUDED#define MAXV 100 //最大 ...
- 第十一周项目实践2 用邻接表存储的图来实现基本应用
假设图G采用邻接表存储,分别设计实现以下要求的算法: (1)输出出图G中每个顶点的出度: (2)求出图G中出度最大的一个顶点,输出该顶点编号: (3)计算图G中出度为0的顶点数: (4)判断图 ...
- 第十一周项目实践1 图基本算法库
#ifndef GRAPH_H_INCLUDED #define GRAPH_H_INCLUDED#define MAXV 100 //最大顶点个数 #define INF 32767 //INF表示 ...
- “暴力美学1”——DFS深度优先搜索
作为新时代青年,"暴力"二字似乎离我们十分遥远,大多数时候我们只能够在电影或者电视剧上接触这个概念 暴力二字或许是个贬义词,但若是我们在后面加上美学二字,或许就是一个值得推敲的词汇 ...
- DFS(深度优先搜索)算法实现
2 DFS算法 DFS(深度优先搜索)算法,搜索过程是类似于不撞南墙不回头的意思,DFS一般使用堆栈(先入后出)这种数据结构实现,由此一来,以初始起点为中心进行搜索,首先是周围点加入到堆栈中,起始点搜 ...
- 图:DFS(深度优先搜索)图解分析代码实现
文章目录 一.简介 二.图的建立 2.1建立图类 2.2建立图 三.DFS 3.1图解 3.2代码 一.简介 图的DFS(深度优先搜索)与BFS(广度优先搜索)是图的两种遍历方式. 主要区别在于当到达 ...
- DFS——深度优先搜索基础
[0]README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在 review DFS--深度优先搜索 的基础知识: [1]深度优先搜索的应用 1.1)深度优先搜索算法描述(转自 ...
- 【算法】蓝桥杯dfs深度优先搜索之排列组合总结
[导航] 上一篇文章 → <[算法]蓝桥杯dfs深度优先搜索之凑算式总结> 为了重申感谢之意,再次声明下文的大部分灵感均来自于[CSDN]梅森上校<JAVA版本:DFS算法题解两 ...
- dfs深度优先搜索_图的深度优先搜索(DFS)
dfs深度优先搜索 Depth First Search (DFS) is an algorithm that searches a graph/tree, in a depth-wise manne ...
最新文章
- Python模拟微博登陆,亲测有效!
- 操作系统课程设计--使用多线程模拟时间片轮转法调度
- windows下线程创建
- 【转】误差矩阵(混淆矩阵)评价法
- 创建mysql视图语法正确的是_MySQL创建视图的语法格式
- 使用Google OAuth 2.0存取Google API (Google Client ID)
- 动态时间规整算法(DTW)通俗易懂
- 水很深的深度学习-Task01深度学习概述与数学基础
- c+mysql主从切换_mysql主从配置
- idea 安装Vue插件 超详细
- Facebook广告有哪些有效策略呢?
- 纵横捭阖C++之从异步谈起
- SEEDLab ARP Cache Poisoning Attack Lab 实验报告
- 爱你的人和你爱的人 你选哪个?
- jasper 引入字体_MAC下JasperStudio创建及引用字体
- 【VMware】下安装OSX10.10-Yosemite【Mac】系统
- 书生笔记-binlog 的写入机制
- 随着我国经济的持续快速发展,城市轻物流需求大幅增长
- 一款练习汇编的神器——DosBox
- Java小技能:异常处理
热门文章
- 2410Init.s
- 光脚丫学LINQ(002):筛选数据
- Android系统编译so库提示error undefined reference to '__android_log_print问题的解决
- USB学习5---android usb驱动源代码目录说明
- Android中常见的MVC模式
- python调用api应用接口_第三方免费快递物流查询接口平台(快递鸟)api接口调用...
- MySQL:Innodb DB_ROLL_PTR指针解析
- 《C++入门经典(第6版)》——1.5 问与答
- 登录环境故障的原理及解决办法? -bash-4.1$ -bash-4.1$
- Codeforces Divisibility【水题】