1. #include<iostream>
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. #include<vector>
  5. using std::vector;
  6. bool t[];
  7. int a[][];
  8. int ans=;
  9. int tx[]={,,,-,};
  10. int ty[]={,-,,,};
  11. int pc[];
  12. int zt=;
  13. int erfen(int a)
  14. {
  15. int ans=-;
  16. int l=,r=zt,mid=(l+r)/;
  17. while(l<=r)
  18. {
  19. if(pc[mid]>a)
  20. {
  21. r=mid-;
  22. mid=(l+r)/;
  23. }
  24. if(pc[mid]<a)
  25. {
  26. l=mid+;
  27. mid=(l+r)/;
  28. }
  29. if(pc[mid]==a)
  30. {
  31. ans=mid;
  32. return ans;
  33. }
  34. }
  35. return ans;
  36. }
  37. void bfs(int x,int y,int a[][],int sum)
  38. {
  39.  
  40. if(erfen(a[][]*+a[][]*+a[][]*
  41. +a[][]*+a[][]*+a[][]*+a[][]*+a[][]*
  42. +a[][])!=-) return ;//如果重复了,直接退出(删除节点)
  43. if(a[][]*+a[][]*+a[][]*
  44. +a[][]*+a[][]*+a[][]*+a[][]*+a[][]*
  45. +a[][]==)
  46. {
  47. if(sum<ans) ans=sum;
  48. cout<<"youyigejie"<<endl;
  49. return ;
  50. } //判断是否目标状态
  51. sum++;
  52. pc[++zt]=a[][]*+a[][]*+a[][]*
  53. +a[][]*+a[][]*+a[][]*+a[][]*+a[][]*
  54. +a[][];
  55. sort(pc,pc++zt);
  56. for(int i=;i<=;i++)
  57. if(tx[i]+x>=&&tx[i]+x<=&&ty[i]+y>=&&ty[i]+y<=)
  58. {
  59. int t[][];
  60. for(int i=;i<=;i++)
  61. for(int j=;j<=;j++)
  62. t[i][j]=a[i][j];
  63. t[x][y]=t[tx[i]+x][ty[i]+y],t[tx[i]+x][ty[i]+y]=;
  64. if(erfen(t[][]*+t[][]*+t[][]*
  65. +t[][]*+t[][]*+t[][]*+t[][]*+t[][]*
  66. +t[][])==-)bfs(x+tx[i],y+ty[i],t,sum);
  67.  
  68. }
  69. }
  70. int main()
  71. {
  72.  
  73. int x,y;
  74. for(int i=;i<=;i++)
  75. for(int j=;j<=;j++)
  76. {
  77. cin>>a[i][j];
  78. if(a[i][j]==) x=i,y=j;
  79. }
  80. bfs(x,y,a,);
  81. cout<<ans<<endl;
  82. return ;
  83. }

P1379 八数码难题的更多相关文章

  1. 洛谷 P1379 八数码难题 解题报告

    P1379 八数码难题 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初 ...

  2. 洛谷——P1379 八数码难题

    P1379 八数码难题 双向BFS 原来双向BFS是这样的:终止状态与起始状态同时入队,进行搜索,只不过状态标记不一样而已,本题状态使用map来存储 #include<iostream> ...

  3. [luogu]P1379 八数码难题[广度优先搜索]

    八数码难题 ——!x^n+y^n=z^n 我在此只说明此题的一种用BFS的方法,因为本人也是初学,勉勉强强写了一个单向的BFS,据说最快的是IDA*(然而蒟蒻我不会…) 各位如果想用IDA*的可以看看 ...

  4. 洛谷P1379八数码难题

    题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中. 要求解的问题是:给出一种初始布局(初始状态)和目标布局(为 ...

  5. 洛谷 P1379 八数码难题 Label:判重&&bfs

    特别声明:紫书上抄来的代码,详见P198 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给 ...

  6. 【洛谷】P1379 八数码难题(bfs)

    题目 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初始状态)和目标布局 ...

  7. 洛谷 P1379 八数码难题

    题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了 ...

  8. 洛谷 - P1379 - 八数码难题 - bfs

    https://www.luogu.org/problemnew/show/P1379 #include <bits/stdc++.h> using namespace std; #def ...

  9. 洛谷—— P1379 八数码难题

    https://daniu.luogu.org/problem/show?pid=1379 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示 ...

  10. luogu P1379 八数码难题

    题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了 ...

随机推荐

  1. js获取上一页、当前页及域名url

    一个业务中可能会用到,跳转到另个页面后, 又后退回之前的页面,之前的页面上有个判断提示一定会出 网上搬了下代码 console.log("js获取当前域名"+window.loca ...

  2. CentOS7 安装 JIRA 7.2.x 教程:下载、安装、汉化、破解

    1.先看视频,参考着能装出个试用版来,不同的地方后面再做说明.JIRA 安装视频(Linux) http://www.confluence.cn/pages/viewpage.action?pageI ...

  3. 如何解决MSSQL中文数据乱码问题

    今天遇到了在数据库中直接写SQL语句,语句中包含中文,但是数据库的表里是包含“?” 的乱码. 我程序代码中,调试时得到的SQL不是乱码,在控制台中也不是乱码.但是在数据库中却出现了乱码. 当用MSSQ ...

  4. leetcode Ch2-Dynamic Programming II

    一. Longest Valid Parentheses 方法一.一维DP class Solution { public: int longestValidParentheses(string s) ...

  5. layui实现checkbox的目录树tree

    layui.use([ 'tree' ], function() {$ = layui.jquery;form = layui.form;//获取节点数据getTreeData();}); funct ...

  6. Java学习---JAVA的类设计

    基础知识 JAVA是由C/C++语言发展而来的纯面向对象语言,其基本元素包括:简单数据类型 和 复合数据类型(即类).类是对客观事物的抽象描述,它有面向对象的四个特点,即:封装性.继承性.多态性和通信 ...

  7. 沉淀再出发:jvm的本质

    沉淀再出发:jvm的本质 一.前言 关于jvm,使用的地方实在是太多了,从字面意思上我们都能明白这也是一个虚拟机,那么其他的虚拟机都会用来运行别的操作系统的,而jvm却是实现了可以在不用的操作系统之上 ...

  8. oracle中RAW数据类型

    近日在研究v$latch视图时,发现一个从未见过的数据类型.v$latch 中ADDR属性的数据类型为RAW(4|8)  同时也发现v$process中的ADDR属性的数据类型也为RAW(4|8).于 ...

  9. Metaspliot进行漏洞扫描

    Metaspliot进行漏洞扫描 Metasploit框架是Metasploit项目中最著名的创作,是一个软件开发.测试和利用漏洞的平台.它可以用来创建安全测试工具开发的模块,也可利用模块作为一个渗透 ...

  10. 解析Java对象的equals()和hashCode()的使用

    解析Java对象的equals()和hashCode()的使用 前言 在Java语言中,equals()和hashCode()两个函数的使用是紧密配合的,你要是自己设计其中一个,就要设计另外一个.在多 ...