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

回溯法思想的应用

文章目录

  • 回溯法思想的应用
    • 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.mfbz.cn/a/602016.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

矾液回收矾树脂

五氧化二钒溶液提取矾树脂A-654的过程&#xff0c;是一个涉及五氧化二钒提纯的重要步骤。我们将详细介绍这一提取过程。 首先&#xff0c;我们需要了解五氧化二钒和净化矾树脂A-654的基本性质。五氧化二钒是一种无机化合物&#xff0c; 净化矾树脂A-654 是一款加载了复杂的多胺…

el-tabs 借助 sortablejs 实现 tab 拖拽功能

sortable.js 是一款 js 拖拽库&#xff0c;支持ie9及以上版本ie浏览器和现代浏览器&#xff0c;也可以运行在移动触摸设备中。不依赖jQuery。支持 Meteor、AngularJS、React、Vue、Knockout框架和任何CSS库&#xff0c;如Bootstrap、Element UI。你可以用来拖拽div、table等元素…

终端安全管理措施有哪些?好用终端安全管理软件推荐(建议收藏)

在当今数字化时代&#xff0c;信息安全已成为企业运营不可或缺的一部分。其中&#xff0c;终端安全为您详细介绍&#xff0c;并推荐几款好用的终端安全管理软件&#xff0c;帮助您更好地保护企业信息安全。管理是确保企业信息安全的重要环节。那么&#xff0c;终端安全管理措施…

基于 Wireshark 分析 ICMP 协议

一、ICMP 协议 ICMP&#xff08;Internet Control Message Protocol&#xff09;即互联网控制报文协议&#xff0c;是TCP/IP协议簇的一个子协议。它主要用于在IP主机、路由器之间传递控制消息&#xff0c;这些消息涉及网络是否通畅、主机是否可达、路由是否可用等关于网络本身…

Quartz怎么简单创建一个定时执行的任务

1.安装Quartz包 2.编写Job任务 继承 IJob编辑自定义任务 3.调用job&#xff0c;以指定时间策略执行 定时600s执行一次 StdSchedulerFactory factory new StdSchedulerFactory(); IScheduler scheduler await factory.GetScheduler(); await scheduler.Start();// 定义…

2024年营销技术远景图发布:14,106种营销技术产品(同比增长27.8%)

每年五月的第一个星期二&#xff08;美国东部时间&#xff09;&#xff0c;Scott Brinker设定为Martech Day&#xff0c;以此来庆祝营销技术行业和所有有才华的营销技术专家和营销运营专业人士的工作&#xff0c;「为你们在开拓这片荒野所做的一切而欢呼&#xff01;」 同时&a…

解决硬盘灯不停的闪硬盘不停的读cpu占用率高的Microsoft Windows Search

可能你发现了&#xff0c;你的硬盘灯一直亮着&#xff0c;为什么&#xff1f;&#xff1f;可能你发现了&#xff0c;你的CPU占用率一直居高不下&#xff0c;为什么&#xff1f;也许就是因为Microsoft Windows Search这个进程 一、windowsSearch的罪证 SearchIndexer和Search…

GWO-CNN|多输入回归预测|灰狼算法优化卷积神经网络|Matlab

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&am…

vmware虚拟机内删除文件后宿主机空间不释放

问题描述 linux下&#xff0c;vmware内虚拟机删除文件&#xff0c;宿主机空间不释放&#xff0c;D盘快满了 解决方法 通过vmware-toolbox进行空间回收 安装 在虚拟机内操作 yum install -y open-vm-tools 清理 在虚拟机内操作 #查看磁盘的挂载点 sudo /usr/bin/vmware…

[C++核心编程-04]----C++类和对象之封装

目录 引言 正文 01-类和对象简介 02-封装简介 03-封装的意义 04-封装案例之设计学生类 05-封装的权限控制 06-struct和class的区别 07-成员属性设置为私有 08-封装案例1-设计立方体 09-封装案例2-判断点和圆的关系 总结 引言 在C中&#xff0c;…

力扣70 爬楼梯 C语言 动态规划 递归

题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示例 2…

天诚人脸物联网锁+网约房管理系统为智慧酒店、民宿管理赋能

随着互联网技术的发展&#xff0c;“网约房”逐渐步入受众视野&#xff0c;在改变旅客入住模式和生活方式的同时&#xff0c;为旅客旅游住宿创造了新的选择&#xff0c;也为拥有冗余房间资源的房东提供了新的营收路径。但是&#xff0c;网约房的管理问题频发&#xff0c;需要数…

栈的2道面试题【有效的括号】【用栈实现队列】

栈的面试题&#xff1a; 1.有效的括号 题目&#xff1a; 有效的括号 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合…

CAN报文中的信号解析

ECU发送的一帧CAN报文中是有多个信号的。信号在报文的数据域中&#xff0c;数据域中可以有多个信号。协议规范一帧CAN报文数据域最多有8个字节&#xff0c;企业中一般都设计为所有的CAN报文都是8字节。8个字节&#xff08;B&#xff09;换算成比特&#xff08;bit&#xff09;就…

内网穿透使用教程

什么是内网穿透 内网穿透&#xff0c;即NAT穿透&#xff0c;网络连接时术语&#xff0c;计算机是局域网内时&#xff0c;外网与内网的计算机节点需要连接通信&#xff0c;有时就会出现不支持内网穿透。就是说映射端口&#xff0c;能让外网的电脑找到处于内网的电脑&#xff0c…

一文让您了解离散制造中的制造执行系统 ​​(MES)

什么是制造执行系统 ​​(MES)&#xff1f; 制造执行系统&#xff08;通常称为MES&#xff09;是一种综合软件解决方案&#xff0c;旨在监视、控制和管理车间的制造运营。MES 充当企业级系统&#xff08;如企业资源规划或 ERP&#xff09;与制造环境中发生的实时流程之间的桥梁…

【设计模式】之观察者模式

系列文章目录 【设计模式】之装饰器模式【设计模式】之工厂模式&#xff08;三种&#xff09;【设计模式】之工厂模式&#xff08;三种&#xff09; 前言 今天给大家介绍另一种设计模式--观察者模式&#xff0c;有了解webscoket实现原理的小伙伴应该对这个设计模式不陌生。不清…

《视觉十四讲》例程运行记录(3)——运行ch6的例程中Ceres和g2o库的安装

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、安装Ceres1. 安装依赖2. 编译安装 二、安装g2o1. 安装依赖项2. 编译安装3. 可能出现的报错(1) 报错一 一、安装Ceres 1. 安装依赖 终端输入&#xff1a; sud…

21 使用Hadoop Java API读取序列化文件

在上一个实验中我们筛选了竞赛网站日志数据中2021/1和2021/2的数据以序列化的形式写到了hdfs上。 接下来我们使用Java API 读取序列化的数据保存到磁盘中。 其他命令操作请参考&#xff1a;16 Java API操作HDFS-CSDN博客 1.我直接在上一个项目中test/java目录下创建com.maidu.s…

72207-80-8,Epoxide-PEG-Epoxide是一种具有两个环氧基团的线性双功能PEG(聚乙二醇)试剂

【试剂详情】 英文名称 Ep-PEG-Ep&#xff0c;Epoxide-PEG-Epoxide 中文名称 环氧基-聚乙二醇-环氧基&#xff0c;聚乙二醇二缩水甘油醚 CAS号 72207-80-8 外观性状 由分子量决定&#xff0c;固体或者液体。 分子量 0.4k&#xff0c;0.6k&#xff0c;1k&#xff0c;2k…
最新文章