news 2026/7/25 5:15:44

根据邻接矩阵对图进行深度广度优先搜索

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
根据邻接矩阵对图进行深度广度优先搜索

题目:以邻接矩阵给出一张以整数编号为顶点的图,其中0为不相连,1为相连。按深度和广度优先进行遍历,输出全部结果。要求遍历时优先较小的顶点。

#include <deque> #include <iostream> #include <stack> #include <vector> #include <algorithm> using namespace std; class Graph { private: int V; vector<vector<int>> adj; public: Graph(int vertices, int** arr): V(vertices) { adj.resize(V); for (int i = 0; i < V; i++) { for (int j = 0; j < V; j++) { if (arr[i][j] == 1) { adj[i].push_back(j); } } sort(adj[i].begin(), adj[i].end()); } } void DFS(int start) { stack<int> s; vector<bool> visited(V, false); //第一个参数是元素个数,第二个是元素的初始值 s.push(start); while (!s.empty()) { int temp = s.top(); s.pop(); if (!visited[temp]) { visited[temp] = true; cout << temp << " "; } for (auto it = adj[temp].rbegin(); it != adj[temp].rend(); it++) { //利用反向迭代器得到里面的数据 if (!visited[*it]) { s.push(*it);//这里必须要用*it是为了解引用迭代器,否则it就只是个位置指示器,而不是一个具体的数据 } } } cout << endl; } void WFS(int start) {//统一在入队的时候进行让visited数组为true deque<int> q; vector<bool> visited(V, false); //初始节点入队并标记 q.push_back(start); visited[start] = true; while (!q.empty()) { int v = q.front(); q.pop_front(); //if(!visited[v]){ cout << v << " "; //这里直接输出,不要再次检查 //} for (auto it = adj[v].begin(); it != adj[v].end(); it++) { if (!visited[*it]) { q.push_back(*it); visited[*it] = true; } } } cout << endl; } //这里需要注意的是,DFS使用的是栈,所以在出栈的时候标记访问,因为是所有元素一下全部进栈 //而WFS用的是队列,没访问完一个元素将他弹出的时候就访问他的neighbor并把他们入队 //所以这里就要求的每次入队的时候就标记访问 }; int main() { int size; cin >> size; int** maze = new int* [size]; for (int i = 0; i < size; i++) { maze[i] = new int[size]; } for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { int a; cin >> a; maze[i][j] = a; } } Graph graph(size, maze); cout << "DFS" << endl; for (int i = 0; i < size; i++) { graph.DFS(i); } cout << "WFS" << endl; for (int i = 0; i < size; i++) { graph.WFS(i); } for (int i = 0; i < size; i++) { delete[] maze[i]; } delete[] maze; }

需要注意两种遍历方法的不同。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/19 11:11:04

跨境电商物流选择指南:从痛点分析到智能决策

跨境电商运营中&#xff0c;物流环节往往是决定成本控制与客户体验的关键因素。面对市场上数十家物流服务商、复杂的价格体系和差异显著的配送时效&#xff0c;如何做出最优选择成为许多卖家的共同挑战。本文将从物流选择的核心痛点出发&#xff0c;探讨数据集成与智能算法在物…

作者头像 李华
网站建设 2026/7/21 10:35:52

百度网盘解析工具:3分钟告别下载限速烦恼

还在为百度网盘的龟速下载而烦恼吗&#xff1f;每次看到几十KB/s的下载速度&#xff0c;是不是都想放弃下载重要文件&#xff1f;今天我要为你介绍一款完全免费、本地运行的百度网盘解析工具&#xff0c;让你彻底告别限速&#xff0c;享受高速下载的畅快体验&#xff01; 【免费…

作者头像 李华
网站建设 2026/7/20 18:39:55

FreeMove终极指南:Windows文件迁移的革命性解决方案

FreeMove终极指南&#xff1a;Windows文件迁移的革命性解决方案 【免费下载链接】FreeMove Move directories without breaking shortcuts or installations 项目地址: https://gitcode.com/gh_mirrors/fr/FreeMove 还在为C盘空间不足而烦恼吗&#xff1f;每次看到系统盘…

作者头像 李华
网站建设 2026/7/23 15:04:21

FeHelper全能工具箱:前端开发效率提升终极指南

在现代前端开发中&#xff0c;开发者常常面临数据处理混乱、编码转换繁琐、代码优化复杂的困境。FeHelper作为一款集成20多种实用工具的全能工具箱&#xff0c;彻底改变了传统开发模式&#xff0c;让效率提升变得触手可及。 【免费下载链接】FeHelper &#x1f60d;FeHelper--W…

作者头像 李华
网站建设 2026/7/24 16:55:34

QQ空间历史说说完整备份指南:永久珍藏你的数字记忆

在数字时代&#xff0c;我们的青春记忆大多储存在QQ空间中。从第一条青涩的说说&#xff0c;到无数个值得纪念的瞬间&#xff0c;这些内容构成了我们珍贵的数字资料。然而平台变迁、账号丢失、内容清理等风险时刻威胁着这些记忆的完整性。GetQzonehistory工具应运而生&#xff…

作者头像 李华
网站建设 2026/7/23 14:31:13

十大MCP Server方案,让DevOps步入智能新时代

本文介绍十款主流DevOps工具及平台中出现的MCP server。 如今的AI编程助手表现堪称惊艳&#xff1a;除了生成复杂代码片段&#xff0c;还能按内部规范重构代码&#xff0c;甚至用通俗易懂的语言解释推理过程。但要让AI助手充分发挥价值&#xff0c;最重要的前提就是与现代DevO…

作者头像 李华