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

深度优先算法学习

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;
}

在这里插入图片描述

相关文章:

  • 五、jmeter脚本参数化
  • Python训练营打卡DAY48
  • 数据网格的革命:从集中式到分布式的数据管理新范式
  • 固态硬盘的寿命与可靠性如何保障?——以Kingston FURY Renegade G5为例的专业解析
  • 实验二:数码管动态显示实验
  • DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
  • ClickHouse 25.3 json列类型使用示例
  • ​​​​​​​6板块公共数据典型应用场景【政务服务|公共安全|公共卫生|环境保护|金融风控|教育科研]
  • 微机原理与接口技术,期末冲刺复习资料(三)
  • 本地缓存在Java中的实现方式
  • C++ 搜索二叉树(BST)详解:实现与应用
  • 【大模型RAG】Docker 一键部署 Milvus 完整攻略
  • 数据库、数据仓库、数据中台、数据湖相关概念
  • 前端十种排序算法解析
  • 比较数据迁移后MySQL数据库和PostgreSQL数据仓库中的表
  • 力扣算法题1
  • JAVASCRIPT 前端数据库-V6--仙盟数据库架构-—-—仙盟创梦IDE
  • 横向对比npm和yarn
  • 省略号和可变参数模板
  • 五年级数学知识边界总结思考-下册
  • 深圳做网站哪个好/信阳网站推广公司
  • 母婴网站开发/网络营销与直播电商是干什么的
  • 佛山app开发公司/seo快速推广
  • 世界疫情最新消息数据/汕头seo公司
  • 郑州金水区网站建设/百度云账号登录
  • 外国人做的网站/营销软件有哪些