回溯法:澳大利亚地图染色问题及伪代码(模版)

问题背景

澳大利亚地图染色问题: 用红绿蓝3色标出各省, 相邻者颜色不同。

对应于澳大利亚地图的约束图, 相互关联的节点用边连接。

− 西澳大利亚 – WA

− 北领地 – NT

− 南澳大利亚 – SA

− 昆士兰 – Q

− 新南威尔士 – NSW

− 维多利亚 – V

− 塔斯马尼亚 – T

一组满足约束的完全赋值: { WA=R, NT=G, Q=R, SA=B, NSW=G, V=R, T=R }

澳大利亚地图染色问题的搜索树

一个简单的回溯算法:深度优先(本文不推荐)

用回溯法模版解决染色问题(本文推荐)

如何理解回溯法

回溯法解决的问题都可以抽象为树形结构,是的,我指的是所有回溯法的问题都可以抽象为树形结构!

因为回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度,都构成的树的深度。

递归就要有终止条件,所以必然是一棵高度有限的树(N叉树)

回溯法模版回顾

参考文章:代码随想录

从图中看出for循环可以理解是横向遍历,backtracking(递归)就是纵向遍历,这样就把这棵树全遍历完了,一般来说,搜索叶子节点就是找的其中一个结果了。

溯法解决的问题都可以抽象为树形结构(N叉树)

回溯法模版伪代码

void backtracking(参数) {
    if (终止条件) {
        存放结果;
        return;
    }

    for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
        处理节点;
        backtracking(路径,选择列表); // 递归
        回溯,撤销处理结果
    }
}

模版应用例子

回溯法:0-1背包问题-CSDN博客

解决本文染色问题伪代码(本文推荐)

最后去掉"去掉这个节点染色,即让节点空白"这里欢迎读者对这个地方讨论

void backtracking(当前的节点) {
  	//下面条件改为"(当前的地图都被染色了"应该也可以
    if (当前的地图都被染色了且染色合法) {
        存放当前染色结果;
        return;
    }
  	//N为总共可染色的色料个数
    for (第i种颜色:N) {
        if(当前节点染第i种颜色且染色合法){
          让该节点染第i种颜色;
          //递归
          //类似图的遍历中找下一个相邻且未被访问的节点
          backtracking(找出下一个当前节点相邻且未被染色的节点); 
          //个人认为下面这个操作去掉应该也可以
          //以防漏掉一些情况,先加上,欢迎读者对这个地方讨论
          去掉这个节点染色,即让节点空白
        }
    }
}

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

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

相关文章

79、avx2 向量指令集优化卷积运算

上一节 介绍了 avx2 向量指令集中的 load/store 操作,本节介绍如何使用 avx2 的向量指令集来实现乘累加运算。 因为我们实战中用到的 resnet50 神经网络中,卷积运算在整个模型中的比例占据是相当高,而卷积运算的核心计算就是乘累加计算。因此,只要将最核心的乘累加计算效率…

Shiro框架:Shiro用户访问控制鉴权流程-Aop注解方式源码解析

目录 1.Spring Aop嵌入点解析 2.Shiro框架Aop切面逻辑解析 2.1 通过注解实现切点 2.2 通过增强逻辑执行校验过程 2.2.1 增强实现类AopAllianceAnnotationsAuthorizingMethodInterceptor 2.2.1.1 类图解析 2.2.1.2 实现增强方法 2.2.1.3 Shiro校验逻辑实现 2.2.1.3.1 …

JVM篇--垃圾回收器高频面试题

1 你知道哪几种垃圾收集器,各自的优缺点是啥,重点讲下cms和G1,包括原理,流程,优缺点? 1)首先简单介绍下 有以下这些垃圾回收器 Serial收集器: 单线程的收集器,收集垃圾时…

Flink(十四)【Flink SQL(中)查询】

前言 接着上次写剩下的查询继续学习。 Flink SQL 查询 环境准备: # 1. 先启动 hadoop myhadoop start # 2. 不需要启动 flink 只启动yarn-session即可 /opt/module/flink-1.17.0/bin/yarn-session.sh -d # 3. 启动 flink sql 的环境 sql-client ./sql-client.sh …

Tomcat Notes: Web Security

This is a personal study notes of Apache Tomcat. Below are main reference material. - YouTube Apache Tomcat Full Tutorial,owed by Alpha Brains Courses. https://www.youtube.com/watch?vrElJIPRw5iM&t801s 1、Overview2、Two Levels Of Web Securi…

深入Matplotlib:画布分区与高级图形展示【第33篇—python:Matplotlib】

文章目录 Matplotlib画布分区技术详解引言方法一:plt.subplot()方法二:简略写法方法三:plt.subplots()实例展示添加更多元素 进一步探索Matplotlib画布分区自定义子图布局3D子图结语 Matplotlib画布分区技术详解 引言 Matplotlib是一个强大…

1.6万字全面掌握 BERT:自然语言处理(NLP)从初学到高级的全面指南

BERT(双向编码器表示来自Transformer的模型)是由Google开发的一种革命性的自然语言处理(NLP)模型。它改变了语言理解任务的格局,使机器能够理解语言中的上下文和细微差异。 在本博客中,我们将带您从 BERT …

动态路由协议 - OSPF 基本配置 详解 (反掩码,宣告,三张表,Cost默认值修改 )

目录 预备工作 : 基础配置 : 先启动 OSPF 的进程 : 创建区域 : 宣告 : 查看三张表 邻居表 : 数据库表 : 路由表 : 以下示拓扑为 OSPF 示范 : 第一步…

基于python卷积网络对漫画人物好坏识别-含数据集和代码

数据集介绍,下载本资源后,界面如下: 有一个文件夹一个是存放数据集的文件。 数据集介绍: 一共含有:2个类别,包含:evil, good等。 然后本地的train.txt和val.txt里面存放的是数据集的图片路径和对应的标签。 运行trai…

linux驱动(八):block,net

本文主要探讨210的block驱动和net驱动。 block 随机存取设备且读写是按块进行,缓冲区用于暂存数据,达条件后一次性写入设备或读到缓冲区 块设备与字符设备:同一设备支持块和字符访问策略,块设备驱动层支持缓冲区,字符设备驱动层没有缓冲 块设备单位:扇…

基于python深度学习的颜色识别-含数据集和代码

数据集介绍,下载本资源后,界面如下: 有一个文件夹一个是存放数据集的文件。 数据集介绍: 一共含有:10个类别,包含:black, blue, brown, green, grey, orange, red, violet, white, yellow等。 然后本地的train.txt和…

什么是游戏盾?哪家效果好。

游戏盾是什么呢,很多做游戏开发的客户估计都是听说过的,但是也不是所有的游戏开发者会运用到。因为,游戏盾是针对游戏行业APP业务所推出的高度可定制的网络安全管理解决方案,除了能针对大型DDoS攻击(T级别)进行有效防御外&#xf…

腾讯云com域名注册怎么收费?

腾讯云com域名首年价格,企业新用户注册com域名首年1元,个人新用户注册com域名33元首年,非新用户注册com域名首年元85元一年,优惠价75元一年,com域名续费85元一年。腾讯云百科txybk.com分享腾讯云com域名注册优惠价格&a…

3.postman动态参数、文件上传及断言

一、postman内置动态参数以及自定义的动态参数 postman内置动态参数: {{$timestamp}} 生成当前时间的时间戳 {{$randomint}} 生成0-1000之间的随机数 {{$guid}} 生成随机guid字符串 自定义动态参数: 在请求中pre-req页面下 //手动的获得时间戳 var…

关于索引的最常见的十道面试题

面试题一:索引底层如何实现的? MySQL索引的底层实现是取决于存储引擎的,但是是大部分存储引擎底层都是通过B树实现的,以默认的存储InnoDB为例,底层就是通过B树实现的,如下图所示: B树是一种自平…

NumPy2要来了,但先别急!

B站:啥都会一点的研究生公众号:啥都会一点的研究生 如果你正在使用 Python 编写代码,那么很有可能正在直接或间接地使用 NumPy 如Pandas、Scikit-Image、SciPy、Scikit-Learn、AstroPy…这些都依赖于 NumPy NumPy 2 是一个新的重要版本&am…

网络逻辑示意图工具

现代网络容纳了来自不同供应商的大量设备,支持一系列新技术,并跨越了分布在多个位置的边界,随着网络变得越来越复杂,网络管理员发现越来越难以跟踪网络领域的所有当代进步和发展,这使得网络管理比以往任何时候都更具挑…

Java8的Stream最佳实践

从这一篇文章开始,我们会由浅入深,全面的学习stream API的最佳实践(结合我的使用经验),本想一篇写完,但写着写着发现需要写的内容太多了,所以分成一个系列慢慢来说。给大家分享我的经验的同时&a…

hadoop必记知识点(1)

1.Hadoop是什么,解决什么问题? Hadoop是一个由Apache基金会所开发的分布式系统基础架构。它可以让使用者在普通的硬件上搭建起一个强大的计算集群。Hadoop的特点包括:高可靠性、高扩展性、高容错性、支持大数据和高并发等。Hadoop核心组件包…

python写完程序怎么运行

python有两种运行方式,一种是在python交互式命令行下运行; 另一种是使用文本编辑器直接在命令行上运行。 注:以上两种运行方式均由CPython解释器编译运行。 当然,也可以将python代码写入eclipse中,用JPython解释器运行&#xff0c…