C++算法之深度优先搜索算法

2023-11-07

深度优先搜索算法是图算法的一种,即DFS(Depth First Search)。其过程是对每个可能的分支路径深入直到不能再深入为止。下面会介绍深度优先搜索算法。


目录

1.框架

2.过程

2.1 步骤

2.2 解释

3. 例题


1.框架

void dfs(int u){//u:当前节点
	vis[u]=true;
	for(int& v:g[u]){//访问u连到的每个节点
		if(!vis[v]) dfs(v);
	}
}

2.过程

2.1 步骤

1、任选一顶点作始点 v ,访问该顶点
2、沿深度方向,依次遍历 v 的未访问邻接点,直到本次遍历结束
3、一次遍历完时,若有未访问顶点,任选一个未访问顶点作起始点,返回第二步

2.2 解释

下面用一张图片讲解深搜的运行过程:

从A出发,深度优先,右手优先,A→B,B→C,C→D,D→E,E→F,因为A走过了,所以F→G,B和D走过了,G→H,H可以通向的字母都走过了,寻找没有被走过的,走到I。

3. 例题

八皇后

【题目描述】

要在国际象棋棋盘(八行八列)中放八个皇后,使任意两个皇后都不能互相吃。(提示:皇后能吃同一行、同一列、同一对角线的任意棋子。)

【输入】

无输入。
【输出】

    若干行,每行一种放置方案;首先输出方案数,然后是八个数,表示每行皇后放置的列号。
【输出样例】
<1>1 5 8 6 3 7 2 4
<2>1 6 8 3 7 4 2 5
<3>1 7 4 6 8 2 5 3
<4>1 7 5 8 2 4 6 3

#include <iostream>
using namespace std;
 
int selected[20];
int flag1[20];
int flag2[20];
int flag3[20];
int cnn;
 
void dfs(int step);
 
int main(){
	dfs(1);
	return 0;
}
 
 
 
void dfs(int step){
	
	if(step==9){
		cout<<"<"<<++cnn<<">";
		for(int i=1;i<=8;i++){
			cout<<selected[i]<<" ";
		}
		cout<<endl;
	}else{
		for(int i=1;i<=8;i++){
			if(!flag1[i]&&!flag2[step+i]&&!flag3[i-step+8]){
				flag1[i]=1;
				flag2[step+i]=1;
				flag3[i-step+8]=1;
				selected[step]=i;
				dfs(step+1);
				flag1[i]=0;
				flag2[step+i]=0;
				flag3[i-step+8]=0;
			}
		}
	}
}

创作不易,白嫖不好,各位的支持和认可,就是我创作的最大动力,如果喜欢我的文章,给个关注吧!

冰焰狼 | 文

如果本篇博客有任何错误,请批评指教,不胜感激 !

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++算法之深度优先搜索算法 的相关文章

随机推荐

  • APS系统到底是什么?为什么许多企业纷纷选择APS系统?

    随着科技的进步 信息处理技术和数据储存能力 提升了规划技术的规划时间和规划效益 大幅度提升了应用先进的解决生产排程问题的可行性 APS高级计划与排程 Advanced Planning and Scheduling 是一种支持计划或计划的信
  • wxWidgets介绍 —— 一文全面了解wxWidgets

    概述 wxWidgets由爱丁堡大学的Julian Smart于1992年创立 最初是一个用于创建在Unix和Windows上可移植的应用程序的项目 后来它已成长为支持MacOS GTK 以及许多其他工具包和平台的界面库 有关更多详细信息
  • MacBook Pro(13 英寸,2011 年初)A1278安装win10无声解决

    用驱动人生 然后扫描驱动 把声卡的驱动升级下就OK了
  • python 面试题 获取当前目录下所有文件名【递归】

    递归的逻辑比较简单 如下 进入到当前路径下时 先创建一个空列表A来保存文件名 遍历当前文件夹中每一项 如果是文件 就放到列表中 如果是文件夹 那就递归进去 返回值是内层的文件列表 归并到A中 最终返回列表A 代码如下 import os d
  • # 子网掩码

    子网掩码 1 概念简介 子网掩码又叫网络掩码 地址掩码 是一个32位地址 用于屏蔽IP地址的一部分以区别网络号和主机号 并说明该IP地址是在局域网上 还是在远程网上 子网掩码不能单独存在 它必须结合IP地址一起使用 定义规则 子网掩码的设定
  • 机器学习数学基础(一):机器学习与数学分析

    机器学习数学基础 一 机器学习 概念 什么是机器学习 什么是学习 内涵与外延 流程 重点知识 Code 机器学习与数学分析 极限 导数 幂指函数 离散加和 连续积分 泰勒公式 应用 方向导数 梯度 特殊函数 函数 凸函数 一阶可微 二阶可微
  • 怎么复制Vmware虚拟机文件到其他的机器、别的硬盘目录

    Vmware虚拟机安装完之后有的时候需要挪动 备份虚拟机文件 比如 从公司电脑复制到家里电脑 或者将已安装好的虚拟机拷贝给同事使用 或者原来磁盘空间满了需要换一个磁盘等等 Vmware提供了相应的迁移和复制分发机制 避免了我们再次安装虚拟机
  • tensorRT模型性能测试

    目录 前言 1 模型训练 1 1 模型 1 2 数据集 1 3 xml2yolo 1 4 yolo2json 1 5 json2yolo 1 6 训练 2 TRT模型转换 2 1 YOLOv5 ONNX导出 2 2 YOLOv6 ONNX导
  • 榜样访谈——曾钰倬:从讲座中收获经验

    先做一个简单的自我介绍吧 大家好 我是来自湖南农业大学计算机科学与技术专业的曾钰倬 现任CSDN高校俱乐部主席 你在计算机学习方面遇到最大的问题是什么 曾钰倬 学习时缺乏概念联系 或者没有与已有知识联系 新知识难于纳入个人的认知结构 导致了
  • 【计算机毕业设计】237校园招聘系统

    一 系统截图 需要演示视频可以私聊 摘要 随着信息技术在管理上越来越深入而广泛的应用 实现基于SSM框架的校园招聘系统的设计与实现在技术上已成熟 本文介绍了基于SSM框架的校园招聘系统的设计与实现的开发全过程 通过分析企业对于基于SSM框架
  • unity编程实践-HitUFO改进

    作业要求 游戏有 n 个 round 每个 round 都包括10 次 trial 每个 trial 的飞碟的色彩 大小 发射位置 速度 角度 同时出现的个数都可能不同 它们由该 round 的 ruler 控制 每个 trial 的飞碟有
  • 0706--用replace来替换用例中的字段,如手机号码或ID

    第第第 第43个视频讲解 coding utf 8 Time 2021 6 23 11 37 AUTHOR 菜菜同学 SOFTWARE lemon1 1 在EXCEL的用例中 mark规则 值 使用这个来表示当前字段需要进行替换 2 在用例
  • CH340串口驱动(包含各系统平台)

    CH340转串口芯片支持的平台驱动齐全 支持 Windows Linux Android MacOS WinCE 等操作系统 各平台下驱动官网链接和说明如下 各平台的安装与使用问题可参见其他博文 Windows驱动 下载链接 CH340 C
  • Spring学习笔记:基于XML文件和注解两种配置方式实现spring框架的IOC和DI

    首先打开IntelliJ IDEA 创建一个Maven项目spring lesson 删除src文件夹 只保留maven依赖对应的pom文件 这个项目作为父工程 在pom文件中增加
  • filco蓝牙键盘配对流程_无线化浪潮,几款最值得推荐的无线机械键盘

    在外设中相比于游戏鼠标和耳机 键盘对于无线的需求性是最弱的 毕竟键盘放在那一般比较固定 不会像鼠标在使用时线材的拖拽影响移动 耳机的连接线会增加重量 这些增加的重量全都要头部去承担 游戏间隙的内急需要取下等干扰 这也导致在无线化的普及度上键
  • Dev-c++函数的分文件编写

    首先创建一个文件侠 到时候创建的文件地址路径能一样 方便查找 c语言和c 语言雷同 2 新建 项目 3 c项目和c 项目 你用那个语言写就选那个 4 把创建的 文件2 dev 文件 保存在刚刚创建的文件下面 5 然后选择New Fie创建文
  • Lua基础之math(数学函数库)

    Lua5 1中数学库的所有函数如下表 math pi 为圆周率常量 3 14159265358979323846 abs 取绝对值 math abs 15 15 acos 反余弦函数 math acos 0 5 1 04719755 asi
  • 企业工作效率提升系统

    企业工作效率提升系统 自动化办公系统 项目介绍 框架介绍 部署流程 项目截图 小编联系方式 备注 系统名称 自动化办公系统 办公自动化 OA 是面向组织的日常运作和管理 员工及管理者使用频率最高的应用系统 极大提高公司的办公效率 项目介绍
  • hive窗口函数最全总结

    准备工作 一 窗口函数概况 1 1 窗口函数说明 1 2 窗口范围说明 1 2 1 窗口范围取值可选项 1 2 2 默认窗口范围含义 思考一 如何理解省略order by的情况 不能指定窗口范围 二 窗口函数分类和特性 2 1 窗口函数分类
  • C++算法之深度优先搜索算法

    深度优先搜索算法是图算法的一种 即DFS Depth First Search 其过程是对每个可能的分支路径深入直到不能再深入为止 下面会介绍深度优先搜索算法 目录 1 框架 2 过程 2 1 步骤 2 2 解释 3 例题 1 框架 voi