Search

A*

luogu1379 八数码难题

  (2021.10.15)

判断可行

  3 × 3 3 \times 3 3×3 的九宫格,其中 8 8 8 个格子中有 1 ∼ 8 1 \sim 8 1∼8 的 8 8 8 个数字。很显然这 8 8 8 个数字有很多种填写方法。我们有一个操作,就是九宫格中没有填数字的方格和旁边的数字交换。现在我们给出两个状态,然后我们要判断两种状态是否能通过若干个操作互相到达,如果能互相到达就输出操作次数最少的一种方法的操作步数。

  首先判断能否相互到达,八数码游戏的两个局面可达,当且仅当把两个局面写成一维形式的时候,逆序对个数的奇偶性相同。证明很简单,分为两种情况。第一种情况:我们左右移动空格位置的时候,一维形式数列不变,所以逆序对奇偶性不变。第二种情况:我们上下移动空格位置的时候,在一维形式上的表现就是某个数与它前(后)面的 2 个数进行位置互换。此时我们又要分两种情况讨论。

  1. 与它进行位置交换的两个数都比它大(小)那么逆序对数量就减少(增加)2。逆序对数量奇偶性不变。
  2. 与他进行交换的两个数一个比他大,另一个比他小,那么逆序对的数量加一再减一就没有变化,所以逆序对数量奇偶性不变。

  然后我们就可以对于两次给出的局面维护一个树状数组求出两次的逆序对数量(也可以用归并排序求逆序对)然后判断奇偶性是否相同就好了。

步数最小

  然后,首先利用上述方法判断是否可解,若问题有解,那我们就采用 A* 算法搜索出一种移动部步数最小的方案。我们令评估函数为当前位置和目标位置有几个数的位置不相同,即:
f ( s t a t e ) = ∑ i = 1 9 ( s t a t e x i = = g o a l x i a n d s t a t e y i = = g o a l y i ) ? 0 : 1 f(state) = \sum_{i=1}^{9} (state_{xi} == goal_{xi} \; and \; state_{yi} == goal_{yi}) \; ? \; 0 \; : \; 1 f(state)=i=1∑9​(statexi​==goalxi​andstateyi​==goalyi​)?0:1
  然后每次我们用当前步数 g(state) 加上 f(state) 来进行扩展,最终状态第一次被从堆中取出时就是最优解。

NOIP Practice Recordings S相关推荐

  1. [校内模拟] 200731 NOIP Practice 咕T6

    文章目录 T1 Tree T2 Brush T3 Read T4 Circle T5 Closing T6 Network T1 Tree 只由相邻两树决定 #include<bits/stdc ...

  2. 安卓手机如何进行手机导航设置

    安卓手机都基本配置了GPS模块,可以让大家便捷的使用地图导航功能.安卓手机的导航设置比较简单,首先要打开手机的GPS定位功能.打开方式:"设置"-"位置"-&q ...

  3. phrases practice_Choose any passage from unit 3 and unit 4 to practice.

    [简答题]什么是单克隆抗体?什么是多克隆抗体?请分别简述其制备方法流程 [其它]掌握ListView与SimpleAdapter的应用,实现对课程成绩的查询显示.要求: 1.使用Spinner控件,显 ...

  4. HDU1089-1096 A+B for Input-Output Practice 系列问题(输入输出格式练习)

    HDU1089 A+B for Input-output Practice (1) 问题描述:每行输入一对整数a和b,每行对应输出a与b的和. Sample Input 1 5 10 20 Sampl ...

  5. Programmer of Practice Manual

    这是我以前再读研究生的时候写的东东,希望搞计算机的同学,教计算机本科生学习技术的文章(非算法类) 粘在这里纪念一下. 大一寒假 结构化编程基础: 图书:<How to C> 实践过程:完成 ...

  6. Database design best practice(1):关于primary key及其它

    1. The job of the primary key is to uniquely identify records, not to store business data ; any use ...

  7. 《Git in Practice》作者访谈:关于Git的八个问题

    Mike McQuaid的著作<Git in Pratice>是一份具有动手实践性的指导,它从实践性的角度介绍了Git,提供了超过60种在操作Git库时会使用到的技巧和命令,并且为有经验的 ...

  8. NOI.AC NOIP模拟赛 第六场 游记

    NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...

  9. [OI]Noip 2018 题解总结(普及)

    考砸了,还有原谅我代码十分有限的可读性. 一个人的真正伟大之处就在于他能够认识到自己的渺小.--保罗 从一年前初一九月到现在18年10月接触OI已经有一年了.几次模拟赛也自我感觉良好,都过了一等的线, ...

最新文章

  1. uva 12167(强连通分支)
  2. 2020 6-7月 每日花语
  3. Spring下@ResponseBody响应中文内容乱码问题
  4. 【完整示例】采用jenkins pipeline实现自动构建并部署至k8s
  5. 贪吃蛇程序设计报告python_20192116 2019-2020-2 《Python程序设计》实验四报告
  6. Numpy的切片操作
  7. 手机将与瘦客户机争夺办公桌面
  8. java程序示例_Java程序中的Google搜索示例
  9. 虚拟化试题1-网络和存储
  10. Beetlsql自学笔记
  11. 物联网商机发展空间无限、远大于互联网,物联网创业和项目也有坑——物联网避坑指南之1
  12. idea解决Untracked Files Prevent Merge问题
  13. 按字寻址和按字节寻址
  14. 【C/C++】scanf,printf 函数
  15. CF - D. Letter Picking(博弈 + 区间dp)
  16. 清北2021毕业生就业报告出炉 清华博士0人出国,70%进体制
  17. 组态王网页服务器,组态王6.55WEB全新发布详细步骤
  18. 软骨再生细胞疗法在3D组织工程平台中通过富含透明质酸的软骨细胞得到增强
  19. 【更新!】3dMax材质ID随机生成器插件MaterialIDsRandomGenerator v2.1.2使用教程
  20. 使用JSAPl来做一个倒计时的效果

热门文章

  1. 神经网络结构包括哪些,神经网络的种类和特点
  2. html url编码、url解码
  3. 快速理解LAN、WAN的区别?
  4. 【GPLT】L2-024 部落
  5. C语言 Mkl 矩阵乘法,与MKL的矩阵乘法
  6. 小程序数据请求注意事项
  7. 解决freemarker生成的静态文件中文乱码的问题
  8. 实用新型专利申请流程
  9. PDF文件的读取 - pdfplumber和fitz(PyMuPDF)
  10. CES Asia:如何将黑胶唱机变成潮流酷玩?