当前位置: 首页 > article >正文

深度优先算法学习

1: 从 1点出发到 15点
在这里插入图片描述

#include <stdio.h>#define MAX_NODES 100typedef struct {int node_id;int *nextNodes;int nextNodesSize;
} Node;// 假设我们有一个节点数组,全局保存了所有节点
Node nodes[MAX_NODES];void dfs(int node_id)
{Node *node = &nodes[node_id];printf("visited: %d\n", node_id); // 打印访问的节点for (size_t i = 0; i < node->nextNodesSize; i++) {dfs(node->nextNodes[i]);}
}int main()
{// 创建并初始化临时数组int nextNodes1[] = {20, 3};int nextNodes2[] = {5, 6};int nextNodes6[] = {9, 10, 15};// 使用这些数组初始化节点nodes[1] = (Node){1, nextNodes1, 2};nodes[20] = (Node){20, nextNodes2, 2};nodes[5] = (Node){5, NULL, 0};nodes[6] = (Node){6, nextNodes6, 3};nodes[9] = (Node){9, NULL, 0};nodes[10] = (Node){10, NULL, 0};nodes[15] = (Node){15, NULL, 0};nodes[3] = (Node){3, NULL, 0};// 执行深度优先搜索dfs(1);return 0;
}

2 : 如果有环 怎么遍历
在这里插入图片描述

#include <stdio.h>#define MAX_NODES 100typedef struct
{int node_id;int *nextNodes;int nextNodesSize;
} Node;// 假设我们有一个节点数组,全局保存了所有节点
Node nodes[MAX_NODES];int isVisited[MAX_NODES]; // 0 没访问过  1 访问过void dfs(int node_id)
{Node *node = &nodes[node_id];if (isVisited[node_id] == 1){return;}isVisited[node_id] = 1;printf("visited: %d\n", node_id); // 打印访问的节点for (size_t i = 0; i < node->nextNodesSize; i++){dfs(node->nextNodes[i]);}
}
int main()
{// 创建并初始化临时数组int nextNodes1[] = {20};int nextNodes20[] = {5, 6};int nextNodes3[] = {1};int nextNodes6[] = {9, 10, 15};int nextNodes15[] = {3};// 使用这些数组初始化节点nodes[1] = (Node){1, nextNodes1, 1};nodes[20] = (Node){20, nextNodes20, 2};nodes[5] = (Node){5, NULL, 0};nodes[6] = (Node){6, nextNodes6, 3};nodes[9] = (Node){9, NULL, 0};nodes[10] = (Node){10, NULL, 0};nodes[15] = (Node){15, nextNodes15, 1};nodes[3] = (Node){3, nextNodes3, 1};// 执行深度优先搜索dfs(1);return 0;
}

3: 是否出现了环
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/bfb76d1d5950403fa208c81eef3525ff.png在这里插入图片描述

#include <stdio.h>
#define MAX_NODES 100typedef struct
{int node_id;int *nextNodes;int nextNodesSize;
} Node;// 假设我们有一个节点数组,全局保存了所有节点
Node nodes[MAX_NODES];int isVisited[MAX_NODES]; // 0 没访问过  1 访问中  2 访问完成void dfs(int node_id)
{Node *node = &nodes[node_id];if (isVisited[node_id] == 1){printf("\n id: %d cycle \n", node_id);return;}if (isVisited[node_id] == 2){return; // 已访问完成,无需重复}isVisited[node_id] = 1;printf("visited: %d\n", node_id);for (size_t i = 0; i < node->nextNodesSize; i++){dfs(node->nextNodes[i]);}isVisited[node_id] = 2;
}int main()
{// 创建并初始化临时数组int nextNodes1[] = {20};int nextNodes20[] = {5, 6};int nextNodes3[] = {1};int nextNodes6[] = {9, 10, 15};int nextNodes15[] = {3};// 使用这些数组初始化节点nodes[1] = (Node){1, nextNodes1, 1};nodes[20] = (Node){20, nextNodes20, 2};nodes[5] = (Node){5, NULL, 0};nodes[6] = (Node){6, nextNodes6, 3};nodes[9] = (Node){9, NULL, 0};nodes[10] = (Node){10, NULL, 0};nodes[15] = (Node){15, nextNodes15, 1};nodes[3] = (Node){3, nextNodes3, 1};// 执行深度优先搜索dfs(1);return 0;
}

4:期望输出环上的结点
在这里插入图片描述

#include <stdio.h>#define MAX_NODES 100typedef struct
{int node_id;int *nextNodes;int nextNodesSize;
} Node;// 假设我们有一个节点数组,全局保存了所有节点
Node nodes[MAX_NODES];int isVisited[MAX_NODES]; // 0 没访问过  1 访问中  2 访问完成int stack[MAX_NODES];
int head=0;void showstack(){printf("\n");for (size_t i = 0; i < head; i++){printf(" %d ",stack[i]);}printf("\n");
}void dfs(int node_id)
{Node *node = &nodes[node_id];if (isVisited[node_id] == 1){showstack();printf("cycle");return;}isVisited[node_id] = 1;printf("visited: %d\n", node_id); // 打印访问的节点stack[head]=node_id;head++;for (size_t i = 0; i < node->nextNodesSize; i++){dfs(node->nextNodes[i]);}isVisited[node_id] = 2;head--;
}int main()
{// 创建并初始化临时数组int nextNodes1[] = {20};int nextNodes20[] = {5, 6};int nextNodes3[] = {1};int nextNodes6[] = {9, 10, 15};int nextNodes15[] = {3};// 使用这些数组初始化节点nodes[1] = (Node){1, nextNodes1, 1};nodes[20] = (Node){20, nextNodes20, 2};nodes[5] = (Node){5, NULL, 0};nodes[6] = (Node){6, nextNodes6, 3};nodes[9] = (Node){9, NULL, 0};nodes[10] = (Node){10, NULL, 0};nodes[15] = (Node){15, nextNodes15, 1};nodes[3] = (Node){3, nextNodes3, 1};// 执行深度优先搜索dfs(1);return 0;
}

在这里插入图片描述

相关文章:

深度优先算法学习

1: 从 1点出发到 15点 #include <stdio.h>#define MAX_NODES 100typedef struct {int node_id;int *nextNodes;int nextNodesSize; } Node;// 假设我们有一个节点数组&#xff0c;全局保存了所有节点 Node nodes[MAX_NODES];void dfs(int node_id) {Node *node &n…...

青少年编程与数学 01-011 系统软件简介 08 Windows操作系统

青少年编程与数学 01-011 系统软件简介 08 Windows操作系统 1. Windows操作系统的起源与发展1.1 早期版本&#xff08;1985-1995&#xff09;1.2 Windows 9x系列&#xff08;1995-2000&#xff09;1.3 Windows NT系列&#xff08;1993-2001&#xff09;1.4 Windows XP及以后版…...

前端技能包

ES6 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><script>// 变量定义var a1;let b5; // 现在使用let 定义变量// 对象解构let person{&quo…...

Vue-github 用户搜索案例

一、前言 在 Vue 开发中&#xff0c;与后端或第三方 API 接口进行交互是非常常见的需求。GitHub 提供了开放的 RESTful API&#xff0c;非常适合用来练习 Vue 的异步请求和数据绑定功能。 本文将带你一步步实现一个完整的 GitHub 用户搜索系统&#xff0c;包括&#xff1a; …...

Mac版Visual Studio Code Copilot 无法使用的解决方法

1 app文件夹删除Visual Studio Code 2 终端里面 输入以下指令&#xff0c;删除各种缓存 rm -fr ~/Library/Preferences/com.microsoft.VSCode.helper.plist rm -fr ~/Library/Preferences/com.microsoft.VSCode.plist rm -fr ~/Library/Caches/com.microsoft.VSCode rm -f…...

【笔记】PyCharm 使用问题反馈与官方进展速览

#工作记录 https://youtrack.jetbrains.com/issue/IJPL-190308 【笔记】记一次PyCharm的问题反馈_the polyglot context is using an implementation th-CSDN博客 【笔记】与PyCharm官方沟通解决开发环境问题-CSDN博客 与 JetBrains 官方沟通记录&#xff08;PyCharm 相关问题…...

操作系统期末版

文章目录 概论处理机管理进程线程处理机调度生产者消费者问题 死锁简介死锁的四个必要条件解决死锁的方法 存储管理链接的三种方式静态链接装入时动态链接运行时链接 装入内存的三种方式绝对装入可重定位装入动态运行时装入 覆盖交换存储管理方式连续分配**分段存储管理方式***…...

本地主机部署开源企业云盘Seafile并实现外部访问

Seafile是一个开源、专业、可靠的云存储平台&#xff1b;解决文件集中存储、共享和跨平台访问等问题。这款软件功能强大&#xff0c;界面简洁、操作方便。 本文将详细的介绍如何利用本地主机部署 Seafile&#xff0c;并结合nat123&#xff0c;实现外网访问本地部署的 Seafile …...

微前端 - Native Federation使用完整示例

这是一个极简化的 Angular 使用angular-architects/native-federation 插件的微前端示例&#xff0c;只包含一个主应用和一个远程应用。 完整示例展示 项目结构 federation-simple/ ├── host-app/ # 主应用 └── remote-app/ # 远程应用 创建远程应用 (remote…...

自然语言处理——语言模型

语言模型 n元文法参数估计数据平滑方法加1法 神经网络模型提出原因前馈神经网络&#xff08;FNN&#xff09;循环神经网络 n元文法 大规模语料库的出现为自然语言统计处理方法的实现提供了可能&#xff0c;统计方法的成功应用推动了语料库语言学的发展。 语句 &#x1d460; …...

数据库管理与高可用-MySQL高可用

目录 #1.1什么是MySQL高可用 1.1.1MySQL主主复制keepalivedhaproxy的高可用 1.1.2优势 #2.1MySQL主主复制keepalivedhaproxy的实验案例 1.1什么是MySQL高可用 MySQL 高可用是指通过技术手段确保 MySQL 数据库在面临硬件故障、软件错误、网络中断、人为误操作等异常情况时&…...

QuaggaJS用法详解

QuaggaJS简介 QuaggaJS是一个强大的JavaScript库&#xff0c;专门用于在浏览器环境中进行条形码和二维码识别。它支持多种条形码格式&#xff0c;包括Code 128、Code 39、EAN、QR码等&#xff0c;并且可以直接调用设备摄像头进行实时扫描。 QuaggaJS核心功能与用法 1. 基本配…...

【鸿蒙在 ETS (Extendable TypeScript) 中创建多级目录或文件,可以使用鸿蒙的文件系统 API】

鸿蒙在 ETS (Extendable TypeScript) 中创建多级目录或文件&#xff0c;可以使用鸿蒙的文件系统 API。 // 导入需要的模块 import fs from ohos.file.fs;const TAG"Index" Entry Component struct Index {State message: string Hello World;build() {Row() {Colum…...

免费工具-微软Bing Video Creator

目录 引言 一、揭秘Bing Video Creator 二、轻松上手&#xff1a;三步玩转Bing Video Creator 2.1 获取与访问&#xff1a; 2.2 创作流程&#xff1a; 2.3 提示词撰写技巧——释放AI的想象力&#xff1a; 三、核心特性详解&#xff1a;灵活满足多样化需求 3.1 双重使用模…...

2025 cs144 Lab Checkpoint 3: TCP Receiver

文章目录 1 关于TCP Sender1.1 关键机制重传超时&#xff08;RTO&#xff09;与定时器 2 实现TCP Sender2.1 void push&#xff08; const TransmitFunction& transmit &#xff09;;const TransmitFunction& transmit 函数型参数&#xff1f;从哪里读取字节&#xff1…...

【学习笔记】深入理解Java虚拟机学习笔记——第5章 调优案例分析与实战

第5章 调优案例分析与实战 5.1 概述 略 5.2 案例分析 5.2.1 大内存硬件上的程序部署策略 为防止大内存一次Full GC时间过长&#xff0c;可以考虑使用响应速度优先的垃圾回收器&#xff0c;还可以通过将一个10GB堆内存的应用分解为5个2GB堆内存应用&#xff0c;并通过负载均…...

Vue 3 Teleport 实战:优雅实现模态框、通知和全局组件

Vue 3 Teleport&#xff1a;突破 DOM 层级限制的组件渲染利器 在 Vue 应用开发中&#xff0c;组件通常与其模板的 DOM 结构紧密耦合。但当处理模态框&#xff08;Modal&#xff09;、通知&#xff08;Toast&#xff09;或全局 Loading 指示器时&#xff0c;这种耦合会成为障碍…...

使用高斯朴素贝叶斯算法对鸢尾花数据集进行分类

高斯朴素贝叶斯算法通常用于特征变量是连续变量&#xff0c;符合高素分布的情况。 使用高斯朴素贝叶斯算法对鸢尾花数据集进行分类 """ 使用高斯贝叶斯堆鸢尾花进行分类 """ #导入需要的库 from sklearn.datasets import load_iris from skle…...

vue中ref的详解以及react的ref对比

文章目录 1. ref是什么2. ref的使用3. ref的特性4. 使用场景5. 注意事项6. 与 React 的对比7. 动态 ref8. 函数式组件中的 ref9. 组合式 API 中的 ref10. 总结 1. ref是什么 ref 被用来给元素或子组件注册引用信息。引用信息将会注册在父组件的 $refs 对象上。可以通过实例对象…...

【笔记】解决MSYS2安装后cargo-install-update.exe-System Error

#工作记录 cargo-install-update.exe-System Error The code execution cannot proceed because libgit2-1.9.dll wasnot found. Reinstalling the program may fix this problem. …...

[论文阅读] 人工智能+软件工程 | MemFL:给大模型装上“项目记忆”,让软件故障定位又快又准

【论文解读】MemFL&#xff1a;给大模型装上“项目记忆”&#xff0c;让软件故障定位又快又准 论文信息 arXiv:2506.03585 Improving LLM-Based Fault Localization with External Memory and Project Context Inseok Yeo, Duksan Ryu, Jongmoon Baik Subjects: Software Engi…...

银行卡二三四要素实名接口如何用PHP实现调用?

一、什么是银行卡二三四要素实名接口 输入银行卡卡号、姓名、身份证号码、手机号&#xff0c;验证此二三四要素是否一致。 二、核心价值 1. 提升风控效率 通过实时拦截冒用身份开户&#xff0c;银行卡二三四要素实名接口显著降低了人工审核成本&#xff0c;效率提升50%以上…...

itvbox绿豆影视tvbox手机版影视APP源码分享搭建教程

我们先来看看今天的主题&#xff0c;tvbox手机版&#xff0c;然后再看看如何搭建&#xff1a; 很多爱好者都希望搭建自己的影视平台&#xff0c;那该如何搭建呢&#xff1f; 后端开发环境&#xff1a; 1.易如意后台管理优化版源码&#xff1b; 2.宝塔面板&#xff1b; 3.ph…...

Docker load 后镜像名称为空问题的解决方案

在使用 docker load命令从存档文件中加载Docker镜像时&#xff0c;有时会遇到镜像名称为空的情况。这种情况通常是由于在保存镜像时未正确标记镜像名称和标签&#xff0c;或者在加载镜像时出现了意外情况。本文将介绍如何诊断和解决这一问题。 一、问题描述 当使用 docker lo…...

Redis 集群批量删除key报错 CROSSSLOT Keys in request don‘t hash to the same slot

Redis 集群报错 CROSSSLOT Keys in request dont hash to the same slot 的原因及解决方案 1. 错误原因 在 Redis 集群模式下&#xff0c;数据根据 哈希槽&#xff08;Slot&#xff09; 分散存储在不同的节点上&#xff08;默认 16384 个槽&#xff09;。当执行涉及多个 key …...

网页抓取混淆与嵌套数据处理流程

当我们在网页抓取中&#xff0c;遇到混淆和多层嵌套的情况是比较常见的挑战。混淆大部分都是为了防止爬虫而设计的&#xff0c;例如使用JavaScript动态加载、数据加密、字符替换、CSS偏移等。多层嵌套则可能是指HTML结构复杂&#xff0c;数据隐藏在多层标签或者多个iframe中。 …...

高性能MYSQL:复制同步的问题和解决方案

一、复制的问题和解决方案 中断MySQL的复制并不是件难事。因为实现简单&#xff0c;配置相当容易&#xff0c;但也意味着有很多方式会导致复制停止&#xff0c;陷入混乱并中断。 &#xff08;一&#xff09;数据损坏或丢失的错误 由于各种各样的原因&#xff0c;MySQL 的复制…...

如何通过外网访问内网服务器?怎么让互联网上连接本地局域网的网址

服务器作为一个数据终端&#xff0c;是很多企事业单位不可获缺的重要设备&#xff0c;多数公司本地都会有部署服务器供测试或部署一些网络项目使用。有人说服务器就是计算机&#xff0c;其实这种说法不是很准确。准确的说服务器算是计算机的一种&#xff0c;它的作用是管理计算…...

大话软工笔记—架构模型

1. 架构模型1—拓扑图 &#xff08;1&#xff09;拓扑图概念 拓扑图&#xff0c;将多个软件系统用网络图连接起来的表达方式。 &#xff08;2&#xff09;拓扑图分类 总线型结构 比较普遍采用的方式&#xff0c;将所有的系统接到一条总线上。 星状结构 各个系统通过点到…...

javaweb -html -CSS

HTML是一种超文本标记语言 超文本&#xff1a;超过了文本的限制&#xff0c;比普通文本更强大&#xff0c;除了文字信息&#xff0c;还可以定义图片、音频、视频等内容。 标记语言&#xff1a;由标签"<标签名>"构成的语言。 CSS:层叠样式表&#xff0c;用于…...