n皇后问题

简介: 解决一个回溯问题,实际就是一个决策树(在每个节点上都在做决策)的遍历过程。只需要思考三个问题:1. 路径:已经做出的选择2. 选择列表:当前可以做的选择3. 结束条件:到达决策树底层,无法再做选择的条件(路径==选择列表长度)

n皇后

解决一个回溯问题,实际就是一个决策树(在每个节点上都在做决策)的遍历过程。只需要思考三个问题:

  1. 路径:已经做出的选择
  2. 选择列表:当前可以做的选择
  3. 结束条件:到达决策树底层,无法再做选择的条件(路径==选择列表长度)

result = []

def backtrack(路径, 选择列表):

   if 满足结束条件:

       result.add(路径)

       return

   

   for 选择 in 选择列表:

       做选择

       backtrack(路径, 选择列表)

       撤销选择

#include<cstdio>

#include<cstdlib>

#include<iostream>

usingnamespacestd;

constintN=20;

intcounter,n;//计数器:记录n皇后一共有几个解

inta[N];//表示第i行上的皇后放在a[i]列上;例a[3]=7,表示第3行的皇后放在第7列

//检查第x行的皇后能否放在第y列

boolcheck(intx,inty){

   //枚举前面x行

   for(inti=1;i<x;i++){

       if(a[i]==y) returnfalse;//第i行已经存在皇后位于第y列

       if(i+a[i]==x+y) returnfalse;//右倾对角线上的点(x,y),x+y都相等

       if(i-a[i]==x-y) returnfalse;//左倾对角线上的点(x,y),x-y都相等

   }

   returntrue;

}

voiddfs(introw){//解决第row行皇后放在哪里

   //到达边界

   if(row==n+1){

       //已经解决n行,产生了一组解

       counter++;

       return;

   }

   //未到达边界,则当前行的皇后有n种可能的放置

   for(inti=1;i<=n;i++){

       //对当前位置i进行check,能否放置

       if(check(row,i)){

           a[row]=i;//放置当前行皇后

           dfs(row+1);//解决下一行的皇后位置,当其递归出时,说明已经产生了一组解

           a[row]=0;//回收当前列皇后,准备将其放在下一列

       }

   }

}

intmain(){

   cin>>n;

   dfs(1);

   cout<<counter;

   return0;

}

图着色问题

给定无向连通图G和m种不同的颜色。

  1. 无相连通图G
  2. m种不同的颜色
  3. G中每个顶点都要着色,且每条边的两个顶点颜色不同
  4. 求共有多少种着色方法

//n:点个数

//c:邻接矩阵 c[i][j]=1表示i与j相连,=0表示不相连

//m:颜色数

//所有数组下标从1开始

voidGraphColor(intn,intc[][],intm){

   for(inti=1;i<=n;i++)//将数组color[n]初始化为0,表示顶点i尚未着色

       color[i]=0;

   k=1;

   while(k>=1){

       

       

   }

}


目录
相关文章
|
关系型数据库 MySQL Shell
4.3 使用sqlmap直连MySQL获取webshell
4.3 使用sqlmap直连MySQL获取webshell
809 0
|
11月前
|
SQL 监控 关系型数据库
使用SQL语句查询操作耗时的技巧与方法
在数据库管理和优化过程中,了解SQL查询操作的耗时是至关重要的
1472 0
[启动流程] RT-Thread是如何启动的?
[启动流程] RT-Thread是如何启动的?
|
关系型数据库 MySQL Java
MySQL 数据库时区设置方法,“The server time zone value ‘�й���׼ʱ��‘ is unrecognized or represents ...” 问题解决
MySQL 数据库时区设置方法,“The server time zone value ‘�й���׼ʱ��‘ is unrecognized or represents ...” 问题解决
837 0
UI文字换行的三种方法
UI文字换行的三种方法
396 0
|
Oracle 关系型数据库 MySQL
Linux安装mysql教程
Linux安装mysql教程安装之前需要先卸载mysql 1.1、下载压缩包 1 [root@guohaien package]# wget https://dev.mysql.com/get/Downloads/MySQL-5.
2356 0
|
12天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1255 5
|
1天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!