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

焦作市网站建设微信crm系统软件

焦作市网站建设,微信crm系统软件,用python做网站的多吗,wordpress 密码加密方式目录 一、BFS 和 DFS 的核心思想 1. BFS(广度优先搜索) 2. DFS(深度优先搜索) 二、BFS 和 DFS 的对比 三、C 代码实现 1. BFS 实现(邻接表表示的无向图) 2. DFS 实现(递归与迭代两种方式&…

目录

一、BFS 和 DFS 的核心思想

1. BFS(广度优先搜索)

2. DFS(深度优先搜索)

二、BFS 和 DFS 的对比

三、C++ 代码实现

1. BFS 实现(邻接表表示的无向图)

2. DFS 实现(递归与迭代两种方式)

四、关键细节说明

1. BFS 的关键点

2. DFS 的关键点

五、应用场景对比

六、总结


一、BFS 和 DFS 的核心思想

1. BFS(广度优先搜索)

  • 核心思想:按“层级”逐层遍历,先访问离起点最近的节点,再逐步向外扩散。

  • 类比:类似水波扩散,一层一层向外推进。

  • 数据结构:队列(FIFO)。

  • 适用场景:最短路径(未加权图)、社交网络层级关系、迷宫最短路径。

2. DFS(深度优先搜索)

  • 核心思想:沿着一条路径尽可能深入,直到无法继续时回溯,尝试其他分支。

  • 类比:走迷宫时,遇到岔路选择一条路走到头,再返回选择其他路。

  • 数据结构:栈(LIFO)或递归调用栈。

  • 适用场景:拓扑排序、连通性检测、回溯问题(如八皇后)、图的环路检测。


二、BFS 和 DFS 的对比

特性BFSDFS
遍历顺序层级遍历(近到远)深度优先(一条路走到黑)
数据结构队列(先进先出)栈(后进先出)或递归
空间复杂度O(N)(最坏情况,如完全二叉树)O(H)(H为树的高度,平衡树时为 O(logN))
时间复杂度O(N + E)(N为节点数,E为边数)同左
最短路径天然支持(未加权图)需额外处理(如记录路径长度)
内存消耗较高(存储每一层节点)较低(仅存储当前路径)
实现复杂度简单(固定队列操作)递归简单,迭代需显式栈

三、C++ 代码实现

1. BFS 实现(邻接表表示的无向图)

#include <iostream>
#include <queue>
#include <vector>
using namespace std;void bfs(const vector<vector<int>>& graph, int start) {vector<bool> visited(graph.size(), false);queue<int> q;q.push(start);visited[start] = true;while (!q.empty()) {int node = q.front();q.pop();cout << node << " "; // 访问节点// 遍历当前节点的所有邻居for (int neighbor : graph[node]) {if (!visited[neighbor]) {visited[neighbor] = true;q.push(neighbor);}}}
}// 示例图结构
vector<vector<int>> graph = {{1, 2},     // 节点0的邻居{0, 3, 4},  // 节点1的邻居{0, 5, 6},  // 节点2的邻居{1},        // 节点3的邻居{1},        // 节点4的邻居{2},        // 节点5的邻居{2}         // 节点6的邻居
};int main() {cout << "BFS遍历结果: ";bfs(graph, 0); // 输出: 0 1 2 3 4 5 6return 0;
}

2. DFS 实现(递归与迭代两种方式)

// 递归实现
void dfsRecursive(const vector<vector<int>>& graph, int node, vector<bool>& visited) {visited[node] = true;cout << node << " "; // 访问节点for (int neighbor : graph[node]) {if (!visited[neighbor]) {dfsRecursive(graph, neighbor, visited);}}
}// 迭代实现(显式栈)
void dfsIterative(const vector<vector<int>>& graph, int start) {vector<bool> visited(graph.size(), false);stack<int> s;s.push(start);visited[start] = true;while (!s.empty()) {int node = s.top();s.pop();cout << node << " ";// 反向遍历邻居以保证与递归顺序一致for (auto it = graph[node].rbegin(); it != graph[node].rend(); ++it) {if (!visited[*it]) {visited[*it] = true;s.push(*it);}}}
}int main() {cout << "DFS递归遍历结果: ";vector<bool> visited(graph.size(), false);dfsRecursive(graph, 0, visited); // 输出: 0 1 3 4 2 5 6cout << "\nDFS迭代遍历结果: ";dfsIterative(graph, 0);          // 输出: 0 1 3 4 2 5 6return 0;
}

四、关键细节说明

1. BFS 的关键点

  • 队列操作:每次从队头取出节点,并将未访问的邻居加入队尾。

  • 最短路径:BFS 首次访问到目标节点时,路径一定是最短的(适用于未加权图)。

  • 空间复杂度:最坏情况下需存储所有节点(如完全二叉树最后一层)。

2. DFS 的关键点

  • 递归与栈:递归隐式使用系统栈,迭代显式使用栈。

  • 遍历顺序:迭代实现中,若按正序访问邻居,结果可能与递归顺序不同(需反向遍历邻居)。

  • 应用场景:适合探索所有可能性(如回溯问题),但可能陷入深层分支无法及时返回。


五、应用场景对比

问题类型推荐算法原因
未加权图最短路径BFS天然支持最短路径
图的连通性检测DFS/BFS二者均可快速遍历所有连通节点
拓扑排序DFS天然支持后序遍历的逆序
迷宫所有路径DFS回溯特性适合探索所有可能路径
社交网络层级关系分析BFS按层遍历符合实际场景
检测环路DFS通过回溯标记路径,容易检测重复访问

六、总结

  • BFS 适合“广度优先”问题,如最短路径;DFS 适合“深度优先”问题,如回溯和连通性。

  • 代码实现:BFS 用队列,DFS 用栈或递归,注意遍历顺序和空间消耗。

  • 选择依据:根据问题特性(如是否需要最短路径、内存限制)选择算法。

http://www.dtcms.com/wzjs/465315.html

相关文章:

  • 如何制作网页插件网站关键词排名优化系统
  • 搭建网站 优帮云免费培训机构管理系统
  • 网站开发和优化关系聚名网域名
  • 电子商务网站开发论文站长网站查询工具
  • 中国发达国家还有多远杭州seo外包
  • 图片上传不了网站企业营销管理
  • 南京网站建设方案百度旗下13个app
  • 那些网站做的非常好看国家免费职业技能培训
  • 用fw做网站页面百度企业推广怎么收费
  • 做网站平台多少钱百度seo排名报价
  • 找个人做网站开不出发票怎么办镇江网站建设推广
  • 做app和做网站哪个容易学大教育培训机构电话
  • 网站ui设计学的是什么厦门网络推广外包多少钱
  • 文化网站建设树枝seo
  • 普陀区网站建设整合营销传播
  • 安庆网站设计seo外链在线工具
  • 网站建设南阳网络推广的主要内容
  • wordpress支持h5百度关键词优化词精灵
  • 无锡市建设培训中心网站百度收录排名
  • 做百科需要发哪些网站韩国日本比分
  • 怎么看网站是哪里做的seo是什么意思 为什么要做seo
  • 免费网站源码下载器网页设计代码大全
  • wap网站开发语言网页设计与制作代码
  • 代做论文 软件指导去哪些网站百度官网链接
  • 学完html怎么做网站网页模版
  • 长沙网络营销外包哪家好seo排名优化软件
  • 郑州企业网站推广泰安百度推广公司
  • 聊城做网站费用信息2024年1月新冠高峰期
  • 做网站系统开发的意义淘宝运营培训班
  • 做的网站打印全乱掉了一个产品的宣传和推广方案