深度优先搜索 DFS(邻接矩阵表示)

数据结构——图的深度遍历(邻接矩阵DFS)(无向图) 数据结构DFS 阅读详情
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

//#define PATH
#define VERTEX_NUM 8

#ifdef PATH
int count = 1;
#endif
bool visited[VERTEX_NUM + 1];        // 访问标志数组(备忘表)

int FirstAdjVex(bool G[VERTEX_NUM + 1][VERTEX_NUM + 1], int v)
{
    for (int j = 1; j <= VERTEX_NUM; j++) {
        if (G[v][j] == 1)
            return j;
    }
    cout << "该点是孤立点" << endl;    // 连通图则不会到这一步
    return -1;
}

int NextAdjVex(bool G[VERTEX_NUM + 1][VERTEX_NUM + 1], int v, int w)
{
    for (int j = w + 1; j <= VERTEX_NUM; j++) {
        if (G[v][j] == 1)
            return j;
    }
    return -1;
}


void DFS(bool G[VERTEX_NUM + 1][VERTEX_NUM + 1], int v)
{
    // 从第v个顶点出发递归地深度优先遍历图G。
    int w;
    visited[v] = true;
    cout << v << endl;
    for (w = FirstAdjVex(G, v);  w != -1;  w = NextAdjVex(G, v, w)) {
#ifdef PATH
        cout << "------------------" << count++ << "----" << v << "->" << w << endl;    // 1
#endif
        if (!visited[w]) {        // 对v的尚未访问的邻接顶点w递归调用DFS
            DFS(G, w);
#ifdef PATH
            cout << v << endl;    // 有待研究?                                            // 2
#endif
        }
    }
#ifdef PATH
    cout << "回溯路径" << v << "->";                                                    // 3
#endif
}

void DFSTraverse(bool G[VERTEX_NUM + 1][VERTEX_NUM + 1])
{
    // 对图G作深度优先遍历。
    int v;
    for (v = 1; v <= VERTEX_NUM; ++v)
        visited[v] = false;                    // 访问标志数组初始化
    for (v = 1; v <= VERTEX_NUM; ++v) {        // 若是连通图,则v=1即全遍历到
        if (!visited[v])
            DFS(G, v);                        // 对尚未访问的顶点调用DFS
    }
}

int main(int argc, char **argv)
{
    freopen("cin.txt", "r", stdin);
    bool G[VERTEX_NUM + 1][VERTEX_NUM + 1] = {0};
    int a;
    int b;
    while (cin >> a >> b, !(a == 0 && b == 0)) {    //以0 0作为输入结束
        G[a][b] = 1;
        G[b][a] = 1;
    }
    for (int i = 1; i <= VERTEX_NUM; i++) {            // 输出邻接矩阵
        for (int j = 1; j <= VERTEX_NUM; j++) {
            cout << G[i][j] << ' ';
        }
        cout << endl;
    }

    DFSTraverse(G);
    cout << endl;

    return 0;
}

/* cin.txt:
2
4
5
4
5
3
6
7
7
0
*/


深度优先搜索DFS——图邻接矩阵表示 同样的DFS,这个是用邻接矩阵保存的图,或许应用没有那么广,要浪费较多的空间,但是还是有必要实现一下的,和之前那个算法的思想是一样的,只是变换了存储结构。 /* 图邻接矩阵表示DFS input: 1 7 A 0 0 0 0 1 0 0 B 0 0 1 1 0 0 0 C 0 1 0 1 0 0 0 D 0 1 0 0 1 1 0 E 1 0 0 1 0 0 1 F 0 0 0 1 0 0 0 阅读详情

相关推荐

数据结构与算法王卓-习题-第六章图-采用邻接矩阵表示图的深度优先搜索遍历(DFS)算法

目录 算法描述 算法预期效果 重难点 思路 个人解法 总结 测试样例与输出 算法描述 创建图的邻接矩阵, 并输出dfs深度优先搜索遍历结果 算法预期效果 依次输入顶点数,边数,顶点V1~Vn,边A1~An,根据输入的顶点与边的关系,输出形如右边的邻接矩阵,接着使用DFS进行深度优先遍历,输出所有结点。 效果一:输出形如右边的邻接矩阵 效果二:输出类似右下角的遍历结果 重难点 个人认为难点一是理解递归的结构,以及如何回退;难点二是visited数组如何声明与引用 思路.

”好的程序员不应该花大量时间在程序调试上,bug从一开始就不该被引入“ 1359

利用邻接矩阵用递归和栈分别实现DFS

大家好,今天给大家分享一下DFS的实现。DFS指的是从某一节点开始,树的深度遍历。 首先创建邻接矩阵,创建邻接矩阵时: 定义无向图的结构体 输入顶点个数 分别输入顶点 对邻接矩阵初始化,初始化边的权值为无穷大 输入边的个数n,分别输入n次两顶点及其所连的边的权值,并且找到顶点位置给边赋值 之后便可以 ...

m0_50317977的博客 1468

echarts实现折线图上下限区域展示

效果图: 画这种区域中主要是利用了series的两个属性: 思路:上下限都画上区域,然后折线利用图形透明度隐藏,给上区域加上颜色,给下区域加上白色(echarts图背景是啥色,就加啥色) lineStyle: { opacity: 0 }, // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形 areaStyle: { color: 'rgba(0,122,255,0.1)' }, // 填充的颜色 我的需求是最大天数、最小天数、

小太阳的博客 1万+

邻接矩阵/图/DFS/BFS

目录1.邻接矩阵的表示2.邻接矩阵的存储3.采用邻接矩阵表示法创建无向网 4.基于邻接矩阵的图上各类操作 5.DFS6.BFS7.测试程序(待完成) 权与网连通分量(强连通分量) 无向图 有向图 网(有权图) 3.采用邻接矩阵表示法创建无向网 创建无向图和有向图的区别 优缺点 声明 广度优先搜索需要的队列(图的遍历) 基于邻接矩阵的图上操作 5.DFS 深度优先搜索属于图算法的一种,是一个针对图和树的遍历算法,英文缩写为DFS即Depth First Search。深度优先搜

m0_61548909的博客 2447

CarMaker快速入门

本合集是小明师兄推出的CarMaker汽车仿真,CarMaker无论是传统动力学、动力系统开发、底盘系统开发还是目前智能驾驶辅助系统及智能驾驶系统开发有着非常重要的作用,可以有效节省开发周期和开发成本,基于仿真快速实现算法开发和系统验证。...

小明师兄的博客 1万+

Ollama安装教程

Ollama 是一个开源的大语言模型(LLM)部署工具,专为在本地机器部署和运行大模型而设计,通过简单的命令就可以在本地快速运行大模型(如DeepSeek、Llama、Gemma、QWQ等)。非常适合开发者、研究人员以及对数据安全和隐私有较高要求的企业和用户

学习AI应用开发,分享AI干货、获取最新AI咨询 3853

图的邻接矩阵和DFS遍历

图的存储结构相对于线性表和树来说,是复杂了许多,而不是用一个线性表或者链表就能定义的。对于图来说,它的存储方式有邻接矩阵,邻接表,十字链表,邻接多重表和边集数组。在这里,要介绍的是如果使用邻接矩阵和邻接表来存储图结构。一、邻接矩阵图的邻接矩阵存储是用两个数组来完成的。一个一维数组存储定点信息(称为顶点数组),一个二维数组存储边信息(称为边数组)。 下面介绍不同类型的邻接矩阵的定义。1. 无向图的邻

XXX 1万+

第一部分:VTK基础入门(第1章:VTK简介与概述)

VTK简介与核心特性概述 VTK(Visualization Toolkit)是一个开源的跨平台C++类库,专用于3D计算机图形学、图像处理和科学可视化。由Kitware公司开发,VTK自1993年起源以来,经历了开源化、成熟化和现代化多个发展阶段,现已成为科学可视化的核心工具之一。 VTK的核心特性包括: 管道架构:模块化设计实现数据流管理 丰富的数据支持:处理多边形数据、图像数据等 强大的渲染能力:集成OpenGL,支持多种渲染技术 最新版本VTK 9.4.2增强了现代C++支持,优化了内存管理,并提升

仰望星空的博客 2360

图的DFS算法在邻接矩阵/邻接表下的非递归实现【C/C++】

图的DFS算法在邻接矩阵下的非递归实现

bblb的博客 2037

0 基础学前端:100 天拿 offer 实战课(第 16 天)—— JS 数组高级方法:数据处理效率翻倍,代码更简洁

方法名核心作用回调函数返回值返回结果适用场景map数据转换转换后的新元素新数组(长度与原数组一致)格式转换、新增字段、生成 DOM 字符串filter数据筛选true(保留)/false(过滤)新数组(符合条件的元素)筛选符合条件的元素(如未完成计划、今天的评论)reduce数据汇总新的累加值任意类型(数字、对象等)求和、计数、分组、多数据汇总find查找元素true(匹配)/false(不匹配)第一个匹配的元素 /undefined。

苏打水.X的博客 134

SerDes学习笔记:DFE均衡架构示例(USB3.1、PCIe3.0\4.0)

本文探讨了DFE均衡器架构在不同数据接口中的应用特性。研究表明,抽头数量随数据速率提升而增加,1-16抽头架构较为常见。通过PCIeGen3/4实例分析,对比了单抽头、双抽头和15抽头DFE的性能差异,证明多抽头结构能通过精细调节有效提升噪声容限和降低误码率。文章详细阐述了DFE工作原理,包括其通过反馈信号对输入信号的补偿机制,以及不同抽头对消除码间干扰的作用。实验采用8Gbps速率(125ps/UI)进行波形仿真,直观展示了均衡处理前后的信号变化,为理解信道均衡技术提供了重要参考。

一只豌豆象的博客 519

图的深度优先搜索(DFS)——图用邻接矩阵表示

该程序是用图的邻接举着实现的。如果想用图的邻接链表实现DFS算法,只要把该程序中的firstAdj()和nextAdj()以及图的创建等操作改用邻接链表实现即可,其他的如DFS主程序框架可以不用修改。 temp.cpp //图的深度优先搜索(DFS) //图用邻接矩阵表示 #include #include #include "temp.h" using namespace std; i

liuzhushiqiang的专栏 1194

SAP ABAP CO核心扩展-为企业定制ZCKM3N物料价格分析增强(CKM3 CKM3N CKM8N)

这篇文章,将为大家讲述物料价格分析扩展增强(ZCKM3N)的方法和原理,并基于CKM3N的视图之一“CV成本组件”,教大家如何一步步实现批量输出多工厂物料的物料价格分析报表。

SAP李斌,本人承诺所有原创文章均不使用任何AI生成技术,请大家放心阅读。 3985

图:邻接矩阵表示法创建无向图并深度优先搜索遍历

无向图表示: 代码: #include<iostream> using namespace std; #define pointMax 100 #define MaxInt 32767 struct AMgroup { char VTchart[pointMax]; //顶点表 int AMchart[pointMax][pointMax]; //邻接矩阵 int point, vert; ...

双鱼座boyy的博客 6615

【推荐100个unity插件之8】实现多人在线联机游戏——Mirror插件的使用介绍(附项目源码)

基于Mirror的Unity多人游戏开发指南 本文介绍了使用Mirror插件开发Unity多人游戏的基本流程。Mirror是Unity的高级网络API,替代了已废弃的UNet系统。文章详细讲解了如何导入Mirror插件,创建NetworkManager网络管理器,处理常见错误,以及创建玩家角色和出生点。 主要内容包括: 创建场景NetworkManager并配置必要组件 为玩家添加NetworkIdentity和NetworkTransform组件 设置玩家初始生成位置和生成方式 常见错误及解决方法 通过M

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

第6章-算法6.5采用邻接矩阵表示图的深度优先搜索遍历

第6章-算法6.5采用邻接矩阵表示图的深度优先搜索遍历 代码实现 #pragma once #include <iostream> using namespace std; #define MVNum 100 //图的邻接矩阵存储(创建无向图) //表示极大值 #define MaxInt 0 //最大顶点数 #define MVNum 100 //顶点类型 typedef char VerTexType; //边上的权值类型 typedef int ArcType; typed

weixin_48192326的博客 1172

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

邻接矩阵表示的深度优先搜索

#include #include #define MAXVEX 100//最大顶点数 typedef struct { char vexs[MAXVEX];//顶点表 int edges[MAXVEX][MAXVEX];//邻接矩阵 int n, e;//顶点数和边 }MGraph; int visited[100]; void DFSM(MGraph *G,

cool_oyty的专栏 863

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

DS图遍历--深度优先搜索

DS图遍历--深度优先搜索 题目描述 给出一个图的邻接矩阵,对图进行深度优先搜索,从顶点0开始 注意:图n个顶点编号从0到n-1 代码框架如下: 输入 第一行输入t,表示有t个测试实例 第二行输入n,表示第1个图有n个结点 第三行起,每行输入邻接矩阵的一行,以此类推输入n行 第i个结点与其他结点如果相连则为1,无连接则为0,数据之间用空格隔开 以此类推...

weixin_34015566的博客 105

邻接矩阵表示图的深度优先搜索和广度优先搜索

图的深度优先搜索(DFS): 可以被形象的描述为“打破沙锅问到底”,具体一点就是访问一个顶点之后,我继而访问它的下一个邻接的顶点,如此往复,直到当前顶点一被访问或者它不存在邻接的顶点。同样,算法导论采用了“聪明的做法”,用三种颜色来标记三种状态。但这三种状态不同于广度优先搜索:WHITE 未访问顶点GRAY 一条深度搜索路径上的顶点,即被发现时BLACK 此顶点的邻接顶点被全部访问完

herongwei 的 BLOG 2627

dfs深度优先搜索—邻接矩阵 + 邻接矩阵-递归版 + 邻接表

【代码】dfs深度优先搜索—邻接矩阵 + 邻接矩阵-递归版 + 邻接表。

lllay_的博客 466

邻接矩阵,邻接链表DFS深度优先搜索C语言

图主要有两种存储结构,邻接矩阵表示法,邻接链表表示法。以有9个顶点的图为例。如图所示邻接矩阵表示法typedef struct { //邻接矩阵 elemtype data[9]; elemtype connect[9][9]; }graph,* graphpoint;建立9个元素的数组用于表示元素并建立对应关系矩阵用于表示顶点之间的关系邻接链表表示法ty...

Hello World.c 1519

邻接矩阵表示图的深度优先搜索遍历

这次用了点c++,用c的话需要考虑吞字符,一开始没想到,写完了也就没改。 运行结果: #include <iostream> using namespace std; #define MaxInt 32767 #define MVNum 100 #define OK 1; bool visited[MVNum]; typedef int Status; typedef char VerTexType; typedef int ArcType; typedef struct { VerTexT

weixin_46106870的博客 1042

深度优先搜索(DFS)邻接矩阵实现

顶点2的所有邻接点已处理完毕。顶点1的所有邻接点已处理完毕。顶点0的所有邻接点已处理完毕。(对角线元素,跳过)

Wjs153612的博客 1619

图的深度优先搜索-递归

图的深度优先搜索的过程: (1)从图的某个顶点V出发,访问V. (2)找出刚访问过的顶点的第一个未被访问的邻接点,访问该顶点。以该顶点为新顶点,重复此步骤,直到 刚顶点没有未bedi被访问的邻接点为止。 (3)返回前一个访问过的且仍有未被访问的邻接点的顶点,找出该din 顶点的下一个未被访问的邻接点,访问该顶点。 (4)重复步骤(2)和(3),直到图中所有的顶点都被访问过,搜索结束。 例如,上图的深度遍历过程如下: (1)从a顶点出发,访问a。 (2)从a出发,访问第一个未被访问的邻接

千言万语ROOM 2332

深度优先搜索和广度优先搜索

1.深度优先搜索 深度优先搜索(Depth First Search),简称DFS。思想为总是对最近才发现的结点v的出发边进行搜索,指导该结点的所有出发边都被发现为止。 伪码描述: void DFS(Vertex v) { visited[v]=true; for(v的每个连接点w) if(!visited[w]) DFS(w); } 代码如下 1. #include<queue> #define Max_Vertex 10 typedef cha

matlab_haha的博客 848

DFS(图的表示与深度历遍搜索)

DFS基础 图的表示方法(2种) 一般我们用邻接矩阵和邻接表来表示图的关系 邻接矩阵 用一个二维数组G存放图,G[i][j]表示节点i和节点j之间边的情况(如有无边,边方向,权值大小等) 。 遍历复杂度:O(n2) n为节点数目 G[n][n] 1 2 3 4 5 6 7 8 9 10 1 0 1 1 0 0 0 0 0 0 0 2 1 0 0 1 0 0 0 0 0 ...

One of thre_tigers的博客 1599
上一篇: 二叉树遍历,栈实现二叉树的非递归遍历
下一篇: 深度优先搜索DFS(邻接表实现)
tham_
博客等级 码龄12年 233粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值