图论1-问题 B: 算法7-4,7-5:图的遍历——深度优先搜索

embedded/2025/1/20 19:42:24/
题目描述
深度优先搜索遍历类似于树的先根遍历,是树的先根遍历的推广。其过程为:假设初始状态是图中所有顶点未曾被访问,则深度优先搜索可以从图中的某个顶点v出发,访问此顶点,然后依次从v的未被访问的邻接点出发深度优先遍历图,直至图中所有和v有路径相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作为起始点,重复上述过程,直至图中所有顶点都被访问到为止。
算法可以描述如下:

在本题中,读入一个无向图的邻接矩阵(即数组表示),建立无向图并按照以上描述中的算法遍历所有顶点,输出遍历顶点的顺序。

输入
输入的第一行包含一个正整数n,表示图中共有n个顶点。其中n不超过50。
以后的n行中每行有n个用空格隔开的整数0或1,对于第i行的第j个0或1,1表示第i个顶点和第j个顶点有直接连接,0表示没有直接连接。当i和j相等的时候,保证对应的整数为0。
输入保证邻接矩阵为对称矩阵,即输入的图一定是无向图。
输出
只有一行,包含n个整数,表示按照题目描述中的深度优先遍历算法遍历整个图的访问顶点顺序。每个整数后输出一个空格,并请注意行尾输出换行。
样例输入 复制
4 0 1 0 1 1 0 0 0 0 0 0 1 1 0 1 0 
样例输出 复制
0 1 3 2 
提示
在本题中,需要熟练掌握图的邻接矩阵存储方式。在建立完成无向图之后,需要严格按照题目描述的遍历顺序对图进行遍历。另外,算法中描述的FirstAdjVex函数和NextAdjVex函数,需要认真的自行探索并完成。
通过这道题目,应该能够对图的深度优先搜索建立更加直观和清晰的概念。
 题解
#include<bits/stdc++.h>
using namespace std;
using ll = long long;const int N = 105;int mp[N][N];int n;bool vis[N];void dfs(int u){cout << u << ' ';vis[u] = true;for(int i = 0;i < n;i ++){if(mp[u][i] == 1 && !vis[i]){dfs(i);}}
}
void bfs(int u){queue<int>q;q.push(u);while(!q.empty()){int cu = q.front();q.pop();cout << cu << ' ';vis[cu] = true;for(int i = 0;i < n;i ++){if(mp[cu][i] == 1 && !vis[i]){vis[i] = true;q.push(i);}      }}
}int main(){ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin >> n;for(int i = 0;i < n;i ++)for(int j = 0;j < n;j ++)cin >> mp[i][j];dfs(0);return 0;
}


http://www.ppmy.cn/embedded/155566.html

相关文章

SpringMVC 实战指南:打造高效 Web 应用的秘籍

第一章&#xff1a;三层架构和MVC 三层架构&#xff1a; 开发服务器端&#xff0c;一般基于两种形式&#xff0c;一种 C/S 架构程序&#xff0c;一种 B/S 架构程序使用 Java 语言基本上都是开发 B/S 架构的程序&#xff0c;B/S 架构又分成了三层架构三层架构&#xff1a; 表现…

thinkphp:实现压缩文件上传、解压、文件更名、压缩包删除功能,增加trycatch

代码 public function upload_firstsure() {try {// 检查是否有文件上传if (!isset($_FILES[file]) || !is_uploaded_file($_FILES[file][tmp_name])) {throw new \Exception(未接收到文件或文件上传失败);}// 获取上传的文件$uploaded_file $_FILES[file][tmp_name];$file_t…

基于Java+Sql Server实现的(GUI)学籍管理系统

基于Java实现的学籍管理系统 1.运行环境 1.1服务器要求 sql server 2008 及以上 1.2客户端要求 装有jvm 并与服务器在同一内网内&#xff0c;可ping通即可 2.功能说明 简化了数据库的使用者&#xff0c;即没有根据用户名自动切换布局的功能&#xff0c;目标使用者即为管…

【JVM】总结篇之GC性能优化案例

文章目录 性能优化案例1&#xff1a;调整堆大小提高服务的吞吐量初始配置优化配置 性能优化案例2&#xff1a;JVM优化之JIT优化即时编译对代码的优化逃逸分析编译器优化栈上分配同步省略标量替换 性能优化案例3&#xff1a;合理配置堆内存推荐配置如何计算老年代存活对象结论你…

HTML元素新视角:置换元素与非置换元素的区分与理解

在HTML的广阔天地里&#xff0c;元素是构建网页的基本单元。它们不仅承载着内容&#xff0c;还通过不同的属性与样式&#xff0c;塑造着网页的外观与功能。在众多HTML元素中&#xff0c;置换元素与非置换元素是一对重要的分类&#xff0c;它们各自独特的特性和行为模式&#xf…

后端开发流程学习笔记

后端开发流程学习笔记 术语前瞻 分类英文中文解释研发模式Waterfall Model瀑布模型瀑布模型&#xff08;Waterfall Model&#xff09;最早强调软件或系统开发应有完整之周期&#xff0c;且必须完整的经历周期之每一开发阶段&#xff0c;并系统化的考量分析与设计的技术、时间…

ip归属地和所在地什么区别:解析网络身份与物理位置的差异‌

在数字世界的浩瀚海洋中&#xff0c;IP地址如同每艘船只的航海图坐标&#xff0c;引领着数据包的航行方向。而IP归属地与所在地&#xff0c;则是这趟旅程中两个至关重要的概念。它们虽紧密相关&#xff0c;却又各具特色&#xff0c;共同构成了网络世界与现实世界的桥梁&#xf…

AI Agent的总体概念:感知,记忆,规划,外部工具,执行

AI Agent的总体概念 AI Agent是一种以大语言模型为核心驱动力的系统,具备自主感知、规划、记忆以及使用工具的能力,能够自动化地完成复杂任务。这意味着它并非简单地对输入做出预设响应,而是可以像人类一样,基于自身“能力”对各种复杂情况进行分析处理,主动完成任务。 …