题目描述:

在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字。棋盘中留有一个空格,空格用0来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为123804765),找到一种最少步骤的移动方法,实现从初始布局到目标布局的转变。

输入格式:

输入初试状态,一行九个数字,空格用0表示

输出格式:

只有一行,该行只有一个数字,表示从初始状态到目标状态需要的最少移动次数(测试数据中无特殊无法到达目标状态数据)

限制:

空间限制:256MByte
时间限制:1秒

样例:

输入:283104765
输出:4

一切尽在代码掌控之中:

#include<iostream>
using namespace std;
int ans[5][5]= {{0,0,0,0},{0,1,2,3},{0,8,0,4},{0,7,6,5}};
int cu[5][5],l,flag=0,xx,yy;
char s[15];
int o[5][4]= {{1,0},{0,-1},{0,1},{-1,0}};
bool ch() {for(int i=1; i<=3; i++)for(int j=1; j<=3; j++)if(ans[i][j]!=cu[i][j])return 0;return 1;
}
bool r(int step) {int cn=0;for(int i=1; i<=3; i++)for(int j=1; j<=3; j++)if(ans[i][j]!=cu[i][j])if(++cn+step>l)return 0;return 1;
}
void dfs(int num,int x,int y,int p) {if(num==l) {if(ch())flag=1;return;}if(flag)return;for(int i=0; i<4; i++) {int tx=x+o[i][0];int ty=y+o[i][1];if(tx<1||ty<1||ty>3||tx>3||p+i==3)continue;swap(cu[x][y],cu[tx][ty]);if(!flag&&r(num))dfs(num+1,tx,ty,i);swap(cu[tx][ty],cu[x][y]);}
}
int main() {scanf("%s",s);for(int i=0; i<9; i++) {cu[i/3+1][i%3+1]=s[i]-'0';if(s[i]-'0'==0)xx=i/3+1,yy=i%3+1;}if(ch())printf("0\n");else {while(++l) {dfs(0,xx,yy,-1);if(flag) {printf("%d\n",l);break;}}}return 0;
}

八数码 详解(C++)相关推荐

  1. Android自定义控件系列八:详解onMeasure()(二)--利用onMeasure测量来实现图片拉伸永不变形,解决屏幕适配问题

    上一篇文章详细讲解了一下onMeasure/measure方法在Android自定义控件时的原理和作用,参看博文:Android自定义控件系列七:详解onMeasure()方法中如何测量一个控件尺寸( ...

  2. 面试必备系列JUC(6)--八锁详解

    文章目录 前言 一.锁总述 二.乐观锁 VS 悲观锁 2.1 基本概念 2.2 实现方式 2.3 优缺点和适应场景 三.公平锁 VS 非公平锁 3.1 基本概念 3.2 源码解析 四.可重入锁 VS ...

  3. 数据结构 | 十大排序超硬核八万字详解【附动图演示、算法复杂度性能分析】

    写在前面 2023年的第一篇博客,在这里先祝大家兔年快乐

  4. 绝境求生(八数码有解无解的问题,求逆序)

    问题 E: [排序]绝境求生 时间限制: 1 Sec  内存限制: 64 MB 提交: 19  解决: 12 题目描述 The Eight Puzzle, among other sliding-ti ...

  5. C++解题报告:详解经典搜索难题——八数码问题( 双向BFS A* 求解)

    引言 AC这道八数码问题,你和楼教主就是兄弟了... 题目描述 在一个3*3的九宫格棋盘里,放有8个数码,数码的数字分别是1~8.棋盘中还有一个位置是空着的,用0表示.可以通过在九宫格里平移数码来改变 ...

  6. 【×××系列八】Dynamic Multipoint *** for IPv6 详解

    [×××系列八]Dynamic Multipoint *** for IPv6 详解 一.前言 由于涉及IPV6加密,所以根据思科标准此次配置使用思科7200系列高级企业版IOS (详情参考我的上一篇 ...

  7. linux中的shell有printf吗,Linux Shell系列教程之(八)Shell printf命令详解

    在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中,已经对Shell printf命令有了一个简略的介绍,本篇给大家详细介绍下Shell中的printf命令. 一.Shell p ...

  8. GridControl详解(八)菜单

    GridControl详解(八)菜单 菜单控件 拖入窗口中 显示如下 设置popupMenu 设置barManager 设置controller 增加菜单项 弹出配置窗口 一般菜单项设置 对应属性如下 ...

  9. [Python从零到壹] 八.数据库之MySQL和Sqlite基础知识及操作万字详解

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  10. 大数据WEB阶段(八)Tomcat服务器安装与详解、HTTP协议详解

    Tomcat 一. 服务器 动态web资源运行需要服务器环境 客户端发送请求到服务器 , 服务器调用动态web资源 Servlet容器 . web容器 .服务器 Servlet容器 java中的动态资 ...

最新文章

  1. 镁光ssd管理工具 linux,在 SSD 上使用 Btrfs 文件系统的相关优化
  2. ios uiview 如何刷新_UIView的重绘及布局刷新
  3. 慢连接 java_记一次redis的java客户端lettuce操作慢的解决方案
  4. “校内”,网进去了谁?
  5. PHP 实现中文截取无乱码的方法
  6. 吴恩达DeepLearningCourse4-卷积神经网络
  7. 2017计算机三级哪个好考,快速突破2017年计算机三级考试的几大复习阶段
  8. php通过url传递变量,PHP:如何在模态URL中放置和传递变量
  9. CC++中的qsort库函数
  10. 多媒体分析与理解_如何设计一个出色的数字多媒体展厅?
  11. 部门管理系统_什么是实物资产管理系统?优势有哪些?
  12. 设计干货栅格系统素材 | UI设计师应用好帮手
  13. python的标准库学习之__buitin__
  14. 从你的全世界路过-人到难处需放胆
  15. 抖音上python有用吗_专栏 | 如何在抖音上找到漂亮小姐姐?这里有个Python抖音机器人...
  16. VTD的官方help翻译-ROD部分(5~9章)
  17. C++常用的大小写转换的方法
  18. Python 黑板客爬虫闯关的第一关
  19. 打砖块 java_java实现打砖块小游戏
  20. 龙蜥社区第十次运营委员会议顺利召开!

热门文章

  1. 游戏动画中欧拉角与万向锁的理解
  2. 索尼工厂被迫停止生产,日本地震带来的冲击可能不止于此
  3. JSSE Java与SSL
  4. 毛子说PostgreSQL 需要实现多主
  5. 如何学习angular.js
  6. linux下载百度网盘文件
  7. ntldr is missing什么意思应该如何解决
  8. lr之RTE脚本(telnet方式访问水木清华)
  9. Fabric java sdk 1.4简明教程
  10. Gartner:市场对5G判断有三点误区,2022年前不会有大规模5G商用案例