news 2026/7/10 12:27:57

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

作者头像

张小明

前端开发工程师

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/10 2:55:52

彻底搞懂 prototype 和 __proto__

一、先理清核心定义&#xff1a;谁拥有 prototype 和 __proto__&#xff1f;特性prototypeproto&#xff08;隐式原型&#xff09;归属只有函数拥有&#xff08;所有函数默认自带&#xff09;只有对象拥有&#xff08;所有对象&#xff0c;包括函数&#xff09;本质普通对象&am…

作者头像 李华
网站建设 2026/7/9 20:23:25

ZooKeeper与Kafka分布式协调系统实战指南:从基础原理到集群部署

前言 在大数据与分布式系统蓬勃发展的今天&#xff0c;分布式环境下的协调同步、高并发消息传递已成为技术架构的核心挑战。Apache ZooKeeper&#xff08;分布式协调服务&#xff09;与Apache Kafka&#xff08;分布式消息队列&#xff09;作为两大核心基础设施&#xff0c;分别…

作者头像 李华
网站建设 2026/7/9 14:51:53

TranslucentTB中文界面终极指南:从诊断到完美配置

TranslucentTB中文界面终极指南&#xff1a;从诊断到完美配置 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 还在为TranslucentTB显示英…

作者头像 李华
网站建设 2026/7/9 4:26:48

UnrealPakViewer实战指南:解密UE4 Pak文件的五大核心技巧

还在为UE4 Pak文件的黑盒操作而头疼吗&#xff1f;UnrealPakViewer作为一款专门针对虚幻引擎4开发的Pak文件查看工具&#xff0c;能够帮你轻松透视Pak文件内部结构&#xff0c;优化资源管理效率。今天我们就来聊聊如何用这款工具解决实际开发中的常见问题&#xff01; 【免费下…

作者头像 李华
网站建设 2026/7/10 10:27:57

漏洞扫描AWVS安装使用教程,三分钟手把手教会!

一、AWS简介 Acunetix Web Vulnerability Scanner(简称AWVS)是一个自动化的Web漏洞扫描工具&#xff0c;它可以扫描任何通过Web浏览器访问和遵循HITP/HTTPS规则的Web站点。 AWVS原理是基于漏洞匹配方法&#xff0c;通过网络爬虫测试你的网站安全&#xff0c;检测流行安全 AWVS…

作者头像 李华
网站建设 2026/7/10 6:49:01

绝区零自动化工具全功能实战指南

绝区零自动化工具全功能实战指南 【免费下载链接】ZenlessZoneZero-OneDragon 绝区零 一条龙 | 全自动 | 自动闪避 | 自动每日 | 自动空洞 | 支持手柄 项目地址: https://gitcode.com/gh_mirrors/ze/ZenlessZoneZero-OneDragon 绝区零自动化工具是一款专为《绝区零》玩家…

作者头像 李华