八数码问题有解的条件及其推广

2023-05-16

>从八数码问题入手

我们首先从经典的八数码问题入手,即对于八数码问题的任意一个排列是否有解?有解的条件是什么?

我在网上搜了半天,找到一个十分简洁的结论。八数码问题原始状态如下:

1 2 3
4 5 6
7 8

为了方便讨论,我们把它写成一维的形式,并以0代替空格位置。那么表示如下:

1 2 3 4 5 6 7 8 0

通过实验得知,以下状态是无解的(交换了前两个数字1 2):

2 1 3 4 5 6 7 8 0

八数码问题的有解无解的结论:

一个状态表示成一维的形式,求出除0之外所有数字的逆序数之和,也就是每个数字前面比它大的数字的个数的和,称为这个状态的逆序。

若两个状态的逆序奇偶性相同,则可相互到达,否则不可相互到达。

由于原始状态的逆序为0(偶数),则逆序为偶数的状态有解。

也就是说,逆序的奇偶将所有的状态分为了两个等价类,同一个等价类中的状态都可相互到达。

简要说明一下:当左右移动空格时,逆序不变。当上下移动空格时,相当于将一个数字向前(或向后)移动两格,跳过的这两个数字要么都比它大(小),逆序可能±2;要么一个较大一个较小,逆序不变。所以可得结论:只要是相互可达的两个状态,它们的逆序奇偶性相同。我想半天只能说明这个结论的必要性,详细的证明请参考后面的附件。

 

>推广二维N×N的棋盘 (poj 2893)

我们先来看看4×4的情况,同样的思路,我们考虑移动空格时逆序的变化情况。

   2    3    4
      7    8
   A    B   C
  E    F   

我们用字母A~F代替数字10~15。同样地,当左右移动的时候,状态的逆序不改变。而当上下移动的时候,相当于一个数字跨过了另外三个格子,它的逆序可能±3或±1,逆序的奇偶性必然改变。那么又该如何

   2    3    4
      7    8
   A    B   
    E    F   

可以证明,以上状态是一个无解的状态(将C移到了第四行)。该状态的逆序为0,和原始状态相同,但是它的空格位置在第三行。若将空格移到第四行,必然使得它的逆序±1或±3,奇偶性必然改变。所以它是一个无解的状态。

然而以下状态就是一个有解的状态(交换了前两个数字1 2):

      3    4
      7    8
   A    B   
       F

这个状态的逆序为1,和原始状态奇偶性不同,而空格位置在第三行。由于空格每从第三行移动到第四行,奇偶性改变。则该状态的可到达原始状态。

通过观察,得出以下结论:

N×N的棋盘,N为奇数时,与八数码问题相同。

N为偶数时,空格每上下移动一次,奇偶性改变。称空格位置所在的到目标空格所在的行步数为空格的距离(不计左右距离),若两个状态的可相互到达,则有,两个状态的逆序奇偶性相同且空格距离为偶数,或者,逆序奇偶性不同且空格距离为奇数数。否则不能。

也就是说,当此表达式成立时,两个状态可相互到达:(状态1的逆序数 + 空格距离)的奇偶性==状态2奇偶性。

另外再详细说明一下,无论N是奇数还是偶数,空格上下移动,相当于跨过N-1个格子。那么逆序的改变可能为一下值±N-1,±N-3,±N-5 …… ±N-2k-1。当N为奇数数时N-1为偶数,逆序改变可能为0;当N为偶数时N-1为奇数,逆序的改变不能为0,只能是奇数,所以没上下移动一次奇偶性必然改变。

 

>推广到三维N×N×N   ( zju 2004 )

其实,三维的结论和二维的结论是一样的。

考虑左右移动空格,逆序不变;同一层上下移动空格,跨过N-1个格子;上下层移动空格,跨过N^2-1个格子。

当N为奇数时,N-1和N^2-1均为偶数,也就是任意移动空格逆序奇偶性不变。那么逆序奇偶性相同的两个状态可相互到达。

当N为偶数时,N-1和N^2-1均为奇数,也就是令空格位置到目标状态空格位置的y z方向的距离之和,称为空格距离。若空格距离为偶数,两个逆序奇偶性相同的状态可相互到达;若空格距离为奇数,两个逆序奇偶性不同的状态可相互到达。

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

八数码问题有解的条件及其推广 的相关文章

  • 十进制转八进制的方法

    include lt stdio h gt int main int n printf 34 请输入一个十进制的数 xff1a 34 scanf 34 d 34 amp n int i 61 0 int arr 100 while n 61
  • Nodejs之目录介绍及app.js说明

    随时随地阅读更多技术实战干货 xff0c 获取项目源码 学习资料 xff0c 请关注源代码社区公众号 ydmsq666 转自 xff1a https www cnblogs com Chen xy p 4466351 html nodejs
  • 源码学习笔记之Openssl

    目录 xff1a apps apps c apps h app rand c asn1pars c build info ca cert srl ca key pem ca req pem ca c CA pl in cert pem ci
  • Segmentation Fault错误原因总结

    一 什么是 Segmentation fault in Linux 所谓的段错误就是指访问的内存超过了系统所给这个程序的内存空间 通常这个值是由gdtr来保存的 他是一个48位的寄存器 其中的32位是保存由它指向的gdt表 后13位保存相应
  • 树莓派使用MobaXterm实现SSH和VNC

    树莓派使用MobaXterm实现SSH和VNC terminal推荐 xff1a MobaXterm 一 开机SSH无线连接 前提 xff1a 树莓派和PC在同一局域网下 xff0c 通过路由器获得树莓派ip 打开ssh boot目录新建文
  • 【Qt】QtCreator远程部署、调试程序

    1 添加远程设备 1 QtCreator 工具 gt 选项 gt 设备 gt 添加 2 设备设置向导选择 gt Generic Linux Device gt 开启向导 3 填写 标识配置的名称 随便写 设备IP 用户名 gt 下一步 4
  • Debian备份与还原

    备份 xff1a sudo su cd tar cvpzf backup tgz exclude 61 proc exclude 61 lost 43 found exclude 61 backup tgz exclude 61 mnt e
  • 微信开放平台-第三方平台开发配置及常见的问题

    目录 概述 参考文档 开源项目 amp 工具 第三方平台设置 问题及解决方法 概述 本实例 xff1a 第三方平台 43 微信公众号 xff08 服务号 xff09 微信开放平台 第三方平台 xff0c 为广大公众号和小程序提供运营服务和行
  • 【Python包管理系列1】python打包发布到PyPI全过程(入门版)

    文章目录 目的准备知识PyPIPyPAsetuptoolsbuildtwine 实战过程总结 目的 如果发布一个python包到pypi上 xff0c 共他人使用 xff0c 本文试图讲清楚 准备知识 PyPI 官网地址 xff1a htt
  • Web自动化测试(二)—— Selenium-API操作

    其他Web测试知识参考 xff1a Web自动化测试 目录 一 元素定位 1 如何进行元素定位 xff1f 2 浏览器开发者工具 2 1 如何使用浏览器开发者工具 二 元素定位方式 1 id定位 2 name定位 3 class name定
  • Java中字符串中子串的查找共有四种方法(indexof())

    亲测可用 xff0c 若有疑问请私信 indexOf 方法返回一个整数值 xff0c 指出 String 对象内子字符串的开始位置 如果没有找到子字符串 xff0c 则返回 1 如果 startindex 是负数 xff0c 则 start
  • 使用rust构建一个js引擎

    转载于 https my oschina net lilugirl2005 blog 3067895
  • Linux下使用acme.sh 配置https 免费证书

    acme sh 简单来说acme sh 实现了 acme 协议 可以从 let s encrypt 生成免费的证书 acme sh 有以下特点 xff1a 一个纯粹用Shell xff08 Unix shell xff09 语言编写的ACM
  • iOS 性能优化之内存优化

    近四年没更CSDN了 xff0c 感慨万千 近年来在搞一款比较大的APP xff0c 项目中代码量100w 43 xff0c 里面使用的三方库 其他领域的二进制包比较多 xff1b 以前这些三方 二进制都挤在同一个工程目录下 xff0c 导
  • 内核升级和降级

    查看已安装的内核 sudo dpkg get selections grep linux 不一样的系统版本升级内核要装的东西对应也不一样 xff0c 需要根据 get selections 安装对应的内核组件 使用apt get 即可完成安
  • Docker: Debian安装Docker

    Debian安装Docker 内容由 网络搜罗整理而来 xff0c 记录与共享 一 APT安装 官方Debian存储库中提供的Docker安装包可能不是最新版本 为了确保我们获得最新版本 xff0c 我们将从官方Docker存储库安装Doc
  • CodeBlocks快捷键

    原文地址 xff1a https blog csdn net lxt lucia article details 79572829 一 汇总 1 编辑部分 xff1a 按住Ctrl xff0c 滚动鼠标滚轮 xff0c 放大或缩小字体 Ct
  • ubuntu 操作系统的目录结构

    Ubuntu 系统的目录众多 xff0c 但是所有的目录都是在 目录下面的 xff0c 并且 Ubuntu 系统是不分 C 盘 D 盘等的 那么 Ubuntu 系统的这些目录具体有哪些呢 xff1f 他们的作用分别是什么呢 xff1f 下面
  • ubuntu安装和查看已安装

    说明 xff1a 由于图形化界面方法 xff08 如Add Remove 和Synaptic Package Manageer xff09 比较简单 xff0c 所以这里主要总结在终端通过命令行方式进行的软件包安装 卸载和删除的方法 一 U
  • CloudKitty安装指导

    安装以下几个模块 xff1a cloudkitty api API service cloudkitty processor Processing service collecting and rating cloudkitty dbsyn

随机推荐

  • Release file for http://xxx/ubuntu/dists/bionic-updates/InRelease is not valid yet报错解决

    参考 https blog 51cto com 5437315 2420097 中说明的原因 原因 xff1a 系统时间与网络时间 xff08 仓库 xff09 的不同导致更新错误 按照这个原因解释 xff0c 我查看了自己虚拟机内ubun
  • Android平台下的图片/视频转Ascii码图片/视频 (二)

    忙里偷闲又来写一篇文章 xff0c 最近在更新一些好玩的图片算法 xff0c 当然也没落下优化ascii码的图像效果 xff0c 这次我将更换一种计算ascii码的方式 xff0c 这样能更好的添加一些效果 xff0c 并且更加清楚的讲解一
  • usage: conda-script.py [-h] [-V] command ... conda-script.py: error: the following arguments are re

    网上看到很多修改condarc文件的说法 xff0c 各有分说 xff0c 各有办法 xff0c 但又不统一 实际上就是你的tensorflow版本不行 https mirrors tuna tsinghua edu cn anaconda
  • github文件下载慢的完美解决方案

    经常光顾github的程序猿朋友有可能面临这样的问题 xff0c 公司或者家里的网速不给力或者 xff0c 宽带运营商比较渣渣 xff08 笔者的宽带是北京宽带通 xff0c 对 就是长城宽带 xff0c 访问国外这种没被墙的网站慢的一匹
  • Java多态实现原理

    Java多态概述 多态是面向对象编程语言的重要特性 xff0c 它允许基类的指针或引用指向派生类的对象 xff0c 而在具体访问时实现方法的动态绑定 Java 对于方法调用动态绑定的实现主要依赖于方法表 xff0c 但通过类引用调用 inv
  • Class文件内容及常量池

    当JVM运行Java程序的时候 xff0c 它会加载对应的class文件 xff0c 并提取class文件中的信息存放在JVM开辟出来的方法区 内存中 那么这个class文件里面到底有些什么内容呢 xff1f 一 class文件内容概述 c
  • 解决Multiple dex files define Landroid/support/v4/accessibilityservice的问题

    Error Execution failed for task 39 DeviceManage transformClassesWithDexForDebug 39 gt com android build api transform Tr
  • pyecharts 图表 将 Html 文件转成图片

    使用 pyecharts 生成图表是非常方便的 xff0c 而且官方文档也特别详细 xff0c 可以满足基本全部的图表需求 但是生成后的图表默认是 html 文件 当需要发送邮件时 xff0c html 文件放在邮件附件 xff0c 邮件里
  • Ceph集群安装

    一 准备工作 xff1a 首先会帮你准备一个 ceph deploy 管理节点 以及三个Ceph 节点 xff08 或虚拟机 xff09 xff0c 以此构成 Ceph 存储集群 以下步骤中admin node为管理节点 xff0c nod
  • open-falcon-小米监控工具

    根据资源消耗特点 高可用要求等 xff0c 可以尝试做一些混合部署 比如 xff1a transfer amp graph amp judge是Open Falcon的三大件 xff0c 承受的压力最大 资源消耗最大 但彼此间又不冲突 xf
  • Mysql多实例+主从复制

    一 安装并启动 xff1a yum install mariadb server mysql mysql server mysql libs y systemctl start mariadb service 设置密码 xff1a mysq
  • 部署Openstack报错及解决办法

    1 nova image show 报错500 yum downgrade python urllib3 版本1 10 yum downgrade python requests 版本2 7 2 http启动报错 cp usr share
  • centos安装Discuz!X3.4 报错mysqli_connect()不支持advice_mysqli_connect解决

    Centos安装Dicus报错 mysqli connect 不支持advice mysqli connect解决办法 原因是因为缺少php mysql组件 xff1b 执行yum install php mysql 会安装php pdo和
  • 修复xrdp永不消逝的窗口:Authentication Required: Authentication is required to create a color managed device

    这个窗口永远不消失 xff0c 也无法编辑 试了网上很多方法对于我的ubuntu20 04系统都无效 xff0c 如 xff1a 添xrdp 远程登录需要输入很多次密码 一次偶然的机会在修复跑程序发现的这个bug时 xff1a Import
  • Android串口通信:抱歉,学会它真的可以为所欲为

    引言 xff1a 之所以写这篇文章 xff0c 一方面是最近工作中对Android串口通信方面学习的总结 另外一方面也希望能够帮助到大家 xff0c 能够简单的去理解串口通信方面的知识 为什么学习Android串口通信 xff1a 距离20
  • DOS命令基础:echo、变量、函数、set、字符串截取

    echo命令 xfeff xfeff echo 显示当前ECHO设置状态 xff1b echo 输出空行 xff0c 即相当于输入一个回车 xff0c echo后面的点要紧挨一起 xff0c 中间不能有空格 xff0c 后面的点可以用 xf
  • iOS个人整理30-网络请求Session与Connection

    一 网络请求的基本知识 1 get方法与post方法 1 get是从服务器上获取数据 xff0c post是向服务器传送数据 2 get是把参数数据队列加到提交表单的ACTION属性所指的URL中 xff0c 值和表单内各个字段一一对应 x
  • 基于Proteus仿真51单片机外部中断实验

    一 实验目的 1 xff0e 进一步熟悉利用 PROTEUS Keil uVision5 等软件的使用方法 2 xff0e 理解单片机的中断 中断优先级原理及中断过程 xff0c 掌握中断服务子程序的编写方法 3 xff0e 熟悉数码管的显
  • 图像细节增强

    本篇主要讲述图像细节增强的几种方法 xff0c 根据论文做了总结笔记 主要有 xff1a L0平滑 xff0c 引导滤波 xff0c 快速双边滤波和边缘保留多尺度图像分解的新方法 xff08 基于加权最小二乘法框架 xff09 图像细节增强
  • 八数码问题有解的条件及其推广

    gt 从八数码问题入手 我们首先从经典的八数码问题入手 xff0c 即对于八数码问题的任意一个排列是否有解 xff1f 有解的条件是什么 xff1f 我在网上搜了半天 xff0c 找到一个十分简洁的结论 八数码问题原始状态如下 xff1a