回溯法思想的应用(头歌)

回溯法思想的应用

文章目录

  • 回溯法思想的应用
    • 1、非递归实现皇后问题
    • 2、递归算法解决皇后问题
    • 3、素数圈

1、非递归实现皇后问题

#include<stdio.h>
#include<stdlib.h>
#define bool char
#define true 1
#define false 0
#define  N 110
int n;
bool col[N];  //列
bool dg[N];  //正对角线
bool udg[N];  //反对角线
char g[N][N];
int solution;
void dfs(int u)
{if(u==n)    //搜索完毕{solution++;for(int i=0;i<n;i++) {for(int j=0;j<n;j++){printf("  ");printf("%c",g[i][j]);}printf("\n") ; //按行输出,没输出一行会换行} printf("\n") ;    //每输出一种答案换行return ;}for(int i=0;i<n;i++)    //u为行,i为列{if(!col[i]&&!dg[u+i]&&!udg[u-i+n]){g[u][i]='Q';col[i]=dg[u+i]=udg[u-i+n]=true;dfs(u+1);col[i]=dg[u+i]=udg[u-i+n]=false;  //回溯g[u][i]='*';     //回溯}}
}
int main()
{scanf("%d",&n);for(int i=0;i<n;i++) for(int j=0;j<n;j++)g[i][j]='*';     //初始化dfs(0);  printf("%d皇后问题共有%d种摆放方案",n,solution) ;return 0;
}

2、递归算法解决皇后问题

#include<stdio.h>
#include<stdlib.h>
#define bool char
#define true 1
#define false 0
#define  N 110
int n;
bool col[N];  //列
bool dg[N];  //正对角线
bool udg[N];  //反对角线
char g[N][N];
int solution;
void dfs(int u)
{if(u==n)    //搜索完毕{solution++;for(int i=0;i<n;i++) {for(int j=0;j<n;j++){printf("  ");printf("%c",g[i][j]);}printf("\n") ; //按行输出,没输出一行会换行} printf("\n") ;    //每输出一种答案换行return ;}for(int i=0;i<n;i++)    //u为行,i为列{if(!col[i]&&!dg[u+i]&&!udg[u-i+n]){g[u][i]='Q';col[i]=dg[u+i]=udg[u-i+n]=true;dfs(u+1);col[i]=dg[u+i]=udg[u-i+n]=false;  //回溯g[u][i]='*';     //回溯}}
}
int main()
{scanf("%d",&n);for(int i=0;i<n;i++) for(int j=0;j<n;j++)g[i][j]='*';     //初始化dfs(0);  printf("%d后问题共有%d种摆放方案",n,solution) ;return 0;
}

3、素数圈

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <stdbool.h>
#define N 100
int n,x[N];
bool vis[N],flag=false;
bool checkPrime(int t)//约束条件 相邻的和为素数
{for(int j=2;j<=sqrt(t);j++){if(t%j==0)return false;}return true;
}
void dfs(int i)
{if(i>n){if(flag){printf("围成的圈是:");for(int j=1;j<i;j++)printf("%d ",x[j]);exit(0);}flag=true;}else{for(int j=1;j<=n;j++){if(!vis[j]&&checkPrime(x[i-1]+j)){vis[j]=true;x[i]=j;dfs(i+1);vis[j]=false;}}}
}
int main()
{scanf("%d",&n);dfs(1);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/833539.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32平衡车-MPU6050的DMP库移植

本文目录 一、硬件接线二、需要移植的三个文件夹1. DMP文件夹目录2. IIC文件夹目录3. MPU6050文件夹目录 三、文件内容IO12C.cIO12C.hMPU6050.cMPU6050.hmain.c 四、附录1.更改IIC引脚 一、硬件接线 SCL-- PA11 SDA-- PA12 VCC-- 3.3v GND-- GND 二、需要移植的三个文件夹 1.…

winscp断点续传

背景 超大文件上传&#xff0c; scp可能因为网络或其他原因中断&#xff0c;并且已上传完的文件无法同步。如何断点续传呢&#xff1f;使用winscp软件 winscp安装 百度搜索&#xff0c;自行安装 开启断点续传功能 https://jingyan.baidu.com/article/fdffd1f8395529b2e98ca…

图纸管理的高效策略与最佳实践

图纸管理的高效策略与最佳实践 在工程设计、产品研发和建筑行业中&#xff0c;图纸管理是一项至关重要的任务。随着项目规模的扩大和复杂性的增加&#xff0c;如何高效、有序地管理图纸已成为企业和团队关注的焦点。本文将为您介绍图纸管理的高效策略与最佳实践&#xff0c;帮助…

一文搞懂深度学习:最全神经网络介绍

本文是深度学习系列文章的第二篇&#xff0c;我们将深入探讨各种类型的人工神经网络&#xff0c;探索它们独特的特性和应用。 01 神经网络介绍 人工神经网络已经彻底改变了机器学习领域&#xff0c;并成为人工智能的基石&#xff0c;它的设计目的是模仿人类大脑的结构和功能&a…

ubuntu_Docker安装配置

什么是docker? Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的 Linux或Windows操作系统的机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有…

『ZJUBCA Collaboration』WTF Academy 赞助支持

非常荣幸宣布&#xff0c;浙江大学区块链协会收到WTF Academy的赞助与支持&#xff0c;未来将共同开展更多深度合作。 WTF Academy是开发者的Web3开源大学&#xff0c;旨在通过开源教育让100,000名开发者进入到Web3。截止目前&#xff0c;WTF开源教程在GitHub收获超15,000 ⭐&a…

【LAMMPS学习】八、基础知识(5.9)LAMMPS 近场动力学

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各种模拟。 …

Ubuntu软件中心不显示

装完Ubuntu后没有Software -- 更新apt sudo apt update -- 升级apt sudo apt upgrade -- 重启 sudo systemctl reboot-- 安装snap sudo apt-get install snap -- 安装软件商店 sudo snap install snap-store -- 更新软件商店 sudo snap refresh snap-store安装成功&#xff01…

学QT的第二天~

小黑子鉴别界面 #include "mywidget.h" void MyWidget::bth1() { if(edit3 ->text()"520cxk"&&edit4 ->text()"1314520") { qDebug()<< "你好&#xff0c;真爱粉"; this->close(); } else { speecher->sa…

【建网护网三十载】 守护不息创新不止,C3安全AI未来!

30年&#xff0c;中国互联网从起步探索到领先全球。1994年4月20日&#xff0c;中国正式开通首条64K的国际专线&#xff0c;标志着我国成功实现与国际互联网的全功能接轨&#xff0c;展开互联网快速发展的三十载。 回望30年&#xff0c;亲历建网&#xff0c;投身建设&#xff0c…

Charles抓包工具

Charles是一个HTTP代理工具&#xff0c;使开发人员能够查看客服端和服务器之间的所有HTTP/ HTTPS/SSL网络请求。 Charles是在PC环境下常用的网络抓包截取工具&#xff0c;在做移动开发时&#xff0c;我们为了调试客户端与服务端的网络通讯协议&#xff0c;常常需要截取网络请求…

大数据集成平台建设方案-word原件资料

基础支撑平台主要承担系统总体架构与各个应用子系统的交互&#xff0c;第三方系统与总体架构的交互。需要满足内部业务在该平台的基础上&#xff0c;实现平台对于子系统的可扩展性。基于以上分析对基础支撑平台&#xff0c;提出了以下要求&#xff1a; (1) 基于平台的基础架构&…

iframe通信postMessage

iframe嵌入页面是实现微前端的方式之一。由于浏览器的跨域限制&#xff0c;iframe与父页面之间的通信变得不是那么容易。postMessage解决了这个问题。从广义上讲&#xff0c;一个窗口可以获得对另一个窗口的引用&#xff08;比如 targetWindow window.parent&#xff09;&…

spring bean生命周期全部过程

Spring Bean的生命周期包括以下全部过程&#xff1a; 实例化&#xff1a;在Spring容器启动时&#xff0c;根据配置文件或注解等信息创建Bean的实例。属性赋值&#xff1a;如果Bean有属性需要进行初始化&#xff0c;Spring容器会自动为这些属性进行赋值。自定义初始化方法&…

线程理论篇1

本章问题&#xff1a;什么是线程?线程的使用场景&#xff1f;什么是线程池&#xff1f;线程池是如何工作的&#xff1f;线程池共享了哪些资源?线程安全代码怎么写&#xff1f;什么是线程安全? 什么是线程&#xff1f; 线程是为了提高进程的效率。进程的地址空间中保存了cpu…

【mysql】mysql单表查询、多表查询、分组查询、子查询等案例详细解析

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

嵌入式C语言高级教程:实现基于STM32的人工智能语音识别系统

在嵌入式系统中实现语音识别技术可以极大地增强设备的交互性。本教程将指导您如何在STM32微控制器上使用TensorFlow Lite for Microcontrollers实现基本的语音识别功能。 一、开发环境准备 硬件要求 微控制器&#xff1a;STM32F746NG&#xff0c;支持足够的运算能力和内存来…

spring高级篇(七)

1、异常处理 在DispatcherServlet中&#xff0c;doDispatch(HttpServletRequest request, HttpServletResponse response) 方法用于进行任务处理&#xff1a; 在捕获到异常后没有立刻进行处理&#xff0c;而是先用一个局部变量dispatchException进行记录&#xff0c;然后统一由…

VMware虚拟机中ubuntu使用记录(5)—— 如何在ubuntu中安装USB相机ros驱动并获取usb摄像头数据

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、ROS下USB相机驱动1.准备工作(1) 下载驱动(2) 创建ROS工作空间 2. 安装usb_cam驱动(1) 安装usb_cam驱动包(2) 编译代码 3. 修改usb_cam驱动的配置文件(1) 查看US…

一路串联电机的绕制原理

这里要说明的一点是 对于一路串联的电机&#xff0c;无论是一把线圈还是两把线圈&#xff0c;出来的都是只有两个线头&#xff0c;可看做一个整体来对待&#xff01; 绕制具体原理 同心式线圈绕制 前面说的都是等距式的 线圈绕制&#xff0c;下面我们讲解一下同心式的绕制办法…