【图】实验题二:实现图的遍历算法

递归深度优先遍历算法

 1 #include<stdio.h>
 2 #include<malloc.h>
 3 #define MAXV 100
 4 #define INF 32767
 5 typedef struct ANode
 6 {
 7     int adjvex;
 8     int weight;
 9     struct ANode *nextarc;
10 } ArcNode;
11
12 typedef struct
13 {
14     int count;
15     ArcNode *firstarc;
16 } VNode;
17
18 typedef struct
19 {
20     VNode adjlist[MAXV];
21     int n, e;
22 }AdjGraph;
23
24 int visit[MAXV] = { 0 };
25
26 void CreateAdj(AdjGraph* &G, int A[MAXV][MAXV], int n, int e);
27 void DFS(AdjGraph *G, int v);
28
29 int main()
30 {
31     AdjGraph * G;
32     int n = 6, e = 10;
33     int A[MAXV][MAXV] = { { 0, 5, INF, 7, INF, INF },
34     { INF, 0, 4, INF, INF, INF },{ 8, INF, 0, INF, INF, 9 },
35     { INF, INF, 5, 0, 5 },{ INF, INF, INF, 5, 0, INF },{ 3, INF, INF, INF, 1, 0 } };
36     CreateAdj(G, A, n, e);
37     printf("从0开始的DFS算法: ");
38     DFS(G, 0);
39     printf("\n");
40     return 0;
41 }
42
43 void DFS(AdjGraph *G, int v) //递归深度优先遍历算法
44 {
45     ArcNode *p;
46     printf("%d ", v);
47     visit[v] = 1;
48     p = G->adjlist[v].firstarc;
49     while (p != NULL)
50     {
51         if (visit[p->adjvex] == 0)
52             DFS(G, p->adjvex);
53         p = p->nextarc;
54     }
55 }
56
57 void CreateAdj(AdjGraph* &G, int A[MAXV][MAXV], int n, int e)  //创建图的邻接表
58 {
59     ArcNode *p;
60     G = (AdjGraph*)malloc(sizeof(AdjGraph));
61     for (int i = 0; i < n; ++i)
62         G->adjlist[i].firstarc = NULL;
63     for (int i = 0; i < n; ++i)
64         for (int j = n - 1; j >= 0; --j)
65             if (A[i][j] != 0 && A[i][j] != INF)
66             {
67                 p = (ArcNode *)malloc(sizeof(ArcNode));
68                 p->weight = A[i][j];
69                 p->adjvex = j;
70                 p->nextarc = G->adjlist[i].firstarc;
71                 G->adjlist[i].firstarc = p;
72             }
73     G->n = n;
74     G->e = e;
75 }

运行结果:

原文地址:https://www.cnblogs.com/sunbines/p/8849583.html

时间: 2024-10-10 06:11:10

【图】实验题二:实现图的遍历算法的相关文章

数据结构(二十一)二叉树遍历算法的应用与二叉树的建立

一.顺序存储结构对树这种一对多的关系结构实现起来是比较困难的.但是二叉树是一种特殊的树,由于它的特殊性,使得用顺序存储结构也可以实现. 二.二叉树的顺序存储结构就是用一维数组存储二叉树中的结点,并且结点的存储位置,也就是数组的下标要能体现结点之间的逻辑关系,比如双亲与孩子的关系,左右兄弟的关系等. 三.完全二叉树可以将相应下标的结点存到数组的相应下标的位置上,对于一般的二叉树来说,完全可以将其按完全二叉树编号,只不过,把不存在的结点设置为"null"而已.这显然是对存储空间的浪费,所以

二叉图(高级数据结构)

一.定义 二叉图(Binary-Map),一种C++14规范中引入的高级数据结构.其集合了二叉树和图论的优点,在世界算法数据结构大会上由斯茂·斯迪尤德恩特首先提出.  二叉图在形式上类似于二叉树,其实现类似于图论(在下面的代码中有介绍).由N个点,E条边构成,E在等于N-1时二叉图的复杂度退化为二叉树,其主要特征是二叉图的深度为depth以下的点中可以以图的方式两两连接,并忽略其中边权,直接理解为两点重合,从而达到以二叉形式实现连通环的目的.  其形式近似于完全连通的杨辉三角或子节点重合的完全二

C语言实现将彩色BMP位图转化为二值图

CTF做了图片的隐写题,还没有形成系统的认识,先来总结一下BMP图的组成,并通过将彩色图转为二值图的例子加深下理解. 只写了位图二进制文件的格式和代码实现,至于诸如RGB色彩和调色板是什么的一些概念就不啰嗦了. BMP位图文件格式 BMP文件由文件头.位图信息头.调色板和图形数据四部分组成,真彩色图是没有调色板的.每部分的具体结构在代码中具体列出并解释. 结构体的对齐 定义文件头部各结构体时要注意对齐的问题,至于什么是结构体对齐,请看这篇博文,写的很详细http://www.cnblogs.co

S0.4 二值图与阈值化

目录 二值图的定义 二值图的应用 阈值化 二值化/阈值化方法 1,无脑简单判断 opencv3函数threshold()实现 2,Otsu算法(大律法或最大类间方差法) OpenCV3 纯代码实现大津法 OpenCV3 threshold算法调用Otsu阈值化 改进版本 OpenCV3函数adaptiveThreshold实现自适应阈值 二值图的定义 二值图是一种特殊的灰度图,即每个像素点要么是白(0),要么是黑(255) 无论是灰度图还是二值图都是用阈值化的知识. 二值图的应用 图像的二值化使

Kinect 2.0 + OpenCV 显示深度数据、骨架信息、手势状态和人物二值图

1.前言 Kinect 2.0实测比第一代性能提升非常多! 本来想简单地找个教程复制黏贴一下,居然还没有人写过C++版的Kinect 2.0教程,自己摸索了一下,现在把结果拿出来和大家分享. 实现的功能是:深度数据(Depth Data),骨架信息(Body Data),手势状态(Hand State)和人物二值图(就是图1的那个东西,微软官方称法是Body Index Data)的提取和显示. 效果如下: 图1 骨架信息,人物二值图和手势状态 图2 深度信息 2.安装 Kinect 2.0的安

从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (二)

本文属于图神经网络的系列文章,文章目录如下: 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (一) 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (二) 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (三) 在上一篇博客中,我们简单介绍了基于循环图神经网络的两种重要模型,在本篇中,我们将着大量笔墨介绍图卷积神经网络中的卷积操作.接下来,我们将首先介绍一下图卷积神经网络的大概框架

实验四 图的遍历算法设计与实现

一.实验名称:图的遍历算法设计与实现 二.实验目的: 1.掌握图的深度优先遍历的算法. 2.掌握图的广度优先遍历的算法. 3.实验章节:算法设计与分析 第四章 三.实验内容.实验问题和程序运行结果 第一部分 广度优先遍历算法 1. 分析Graph类,画出Graph类初始化以后的Graph对象的数据结构图. 2. 分析BFS函数,画出流程图. 3. 上述程序   int data[7][7]={{ 1,-1,-1,-1,-1,-1,-1}, { 6, 3, 2,-1,-1,-1,-1}, { 0,

数据结构(三十二)图的遍历之广度优先遍历

一.广度优先遍历算法描述 广度优先遍历(Breadth_First_Search),又称为广度优先搜索,简称BFS.图的广度优先遍历类似于树的层序遍历. BFS算法描述:从图中的某个顶点v开始,先访问该顶点,再依次访问该顶点的每一个未被访问过的邻接点w1,w2,...:然后按此顺序访问顶点w1,w2...的各个还未 被访问过的邻接点.重复上述过程,直到图中的所有顶点都被访问过为止. 以下图为例子,顶点访问序列为{A B F C I G E D H} 二.广度优先遍历算法实现 原文地址:https

用 Python 通过马尔可夫随机场(MRF)与 Ising Model 进行二值图降噪

前言 这个降噪的模型来自 Christopher M. Bishop 的 Pattern Recognition And Machine Learning (就是神书 PRML……),问题是如何对一个添加了一定椒盐噪声(Salt-and-pepper Noise)(假设噪声比例不超过 10%)的二值图(Binary Image)去噪. 原图 添加 10% 椒盐噪声的图 建模 下文中的数学表示: yi:噪声图中的像素 xi:原图中的像素,对应噪声图中的 yi 既然噪声图是从原图添加噪声而来,我们拥