不多述,直接上代码,至于康拓展开,以前的文章里有

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<queue>
  4. using namespace std;
  5. int fac[]={1,1,2,6,24,120,720,5040,40320,362880};//阶乘表
  6. int dir[4][2]={1,0,0,1,-1,0,0,-1};//方向
  7. int vis[362881];
  8. int kangst,kanged;
  9. int t1[3][3];
  10. int t2[3][3];
  11. pair<int,int>p;
  12. struct node{
  13. int maze[3][3];
  14. pair<int,int>pos;
  15. int kang;
  16. int step;
  17. };
  18. int Kang_open (int t[3][3])
  19. {
  20. int s[9],num=0,k=0,sum=0;
  21. for(int i=0;i<3;i++)
  22. for(int j=0;j<3;j++)
  23. s[k++]=t[i][j];
  24. for(int i=0;i<9;i++){
  25. num=0;
  26. for(int j=i+1;j<9;j++)
  27. {
  28. if(s[i]>s[j])
  29. num++;
  30. }
  31. sum+=num*fac[8-i];
  32. }
  33. return sum;
  34. }
  35. int bfs()
  36. {
  37. node now;
  38. for(int i=0;i<3;i++)
  39. for(int j=0;j<3;j++)
  40. now.maze[i][j]=t1[i][j];
  41. now.kang=kangst;
  42. now.step=0;
  43. now.pos=p;
  44. vis[kangst]=1;
  45. queue<node>que;
  46. que.push(now);
  47. while(!que.empty())
  48. {
  49. now=que.front();
  50. que.pop();
  51. if(now.kang==kanged)
  52. return now.step;
  53. node next=now;
  54. for(int i=0;i<4;i++)
  55. {
  56. next=now;
  57. next.pos.first = now.pos.first+dir[i][0];
  58. next.pos.second= now.pos.second+dir[i][1];
  59. if(next.pos.first >=0&&next.pos.first <3&&next.pos.second>=0&&next.pos.second<3)
  60. {
  61. next.maze[now.pos.first][now.pos.second]=now.maze[next.pos.first][next.pos.second];
  62. next.maze[next.pos.first][next.pos.second]=0;
  63. next.kang=Kang_open(next.maze);
  64. if(!vis[next.kang])
  65. {
  66. vis[next.kang]=1;
  67. next.step++;
  68. que.push(next);
  69. }
  70. }
  71. }
  72. }
  73. return -1;
  74. }
  75. int main ()
  76. {
  77. for(int i=0;i<3;i++)
  78. for(int j=0;j<3;j++){
  79. scanf("%d",&t1[i][j]);
  80. if(t1[i][j]==0)
  81. p.first=i,p.second=j;
  82. }
  83. kangst=Kang_open(t1);
  84. for(int i=0;i<3;i++)
  85. for(int j=0;j<3;j++)
  86. scanf("%d",&t2[i][j]);
  87. kanged=Kang_open(t2);
  88. printf("%d\n",bfs());
  89. return 0;
  90. }

8数码,欺我太甚!<bfs+康拓展开>的更多相关文章

  1. hdu 1043 pku poj 1077 Eight (BFS + 康拓展开)

    http://acm.hdu.edu.cn/showproblem.php?pid=1043 http://poj.org/problem?id=1077 Eight Time Limit: 1000 ...

  2. Eight (HDU - 1043|POJ - 1077)(A* | 双向bfs+康拓展开)

    The 15-puzzle has been around for over 100 years; even if you don't know it by that name, you've see ...

  3. HDU 4531 bfs/康拓展开

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4531 吉哥系列故事——乾坤大挪移 Time Limit: 2000/1000 MS (Java/Othe ...

  4. bnuoj 1071 拼图++(BFS+康拓展开)

    http://www.bnuoj.com/bnuoj/problem_show.php?pid=1071 [题意]:经过四个点的顺逆时针旋转,得到最终拼图 [题解]:康拓展开+BFS,注意先预处理,得 ...

  5. 九宫重拍(bfs + 康拓展开)

    问题描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成第二个图所示的局面. 我们把第一个图的局面记为:12 ...

  6. hdu-1043 bfs+康拓展开hash

    因为是计算还原成一种局面的最短步骤,应该想到从最终局面开始做bfs,把所有能到达的情况遍历一遍,把值存下来. bfs过程中,访问过的局面的记录是此题的关键,9*9的方格在计算过程中直接存储非常占内存. ...

  7. cdoj 414 八数码 (双向bfs+康拓展开,A*)

    一道关乎人生完整的问题. DBFS的优越:避免了结点膨胀太多. 假设一个状态结点可以扩展m个子结点,为了简单起见,假设每个结点的扩展都是相互独立的. 分析:起始状态结点数为1,每加深一层,结点数An ...

  8. hdu 1043 Eight (八数码问题)【BFS】+【康拓展开】

    <题目链接> 题目大意:给出一个3×3的矩阵(包含1-8数字和一个字母x),经过一些移动格子上的数后得到连续的1-8,最后一格是x,要求最小移动步数. 解题分析:本题用BFS来寻找路径,为 ...

  9. ACM/ICPC 之 BFS(离线)+康拓展开 (HDU1430-魔板)

    魔板问题,一道经典的康拓展开+BFS问题,为了实现方便,我用string类来表示字符串,此前很少用string类(因为不够高效,而且相对来说我对char数组的相关函数比较熟),所以在这里也发现了很多容 ...

随机推荐

  1. robotframework的分支和循环

    分支: run keyword if  | condition |  do something ...   |      else if | condition | do something ... ...

  2. 《剑指Offer》算法题——“旋转数组”的最小数字

    题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个非递减序列的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数 ...

  3. Windows 路径问题

    Windows路径是我们经常使用的东西,它看似简单,实际上隐含许多细节,这些都是在平常的使用过程中注意不到的.下面让我们来看看各种各样的Windows路径.     提起路径,我们都会想到" ...

  4. VBS 文件选择框,选择Excel文件

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 on error resume Next Set objDialog=CreateObject("UserAcc ...

  5. 如何在VBS脚本中显示“选择文件对话框”或“选择目录对话框”

    .选择文件[XP操作系统,不能用于Win2000或98],使用“UserAccounts.CommonDialog”对象向用户显示一个标准的“文件打开”对话框 Set objDialog = Crea ...

  6. ERROR 1406 : Data too long for column 解决办法

    解决办法: 在my.ini里找到 sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_Create_USER,NO_ENGINE_SUBSTITUTION” 把其中的STRIC ...

  7. hdu_5773_The All-purpose Zero(LIS)

    题目链接:hdu_5773_The All-purpose Zero 题意: 给你一串数,让你求LIS,不过这里的0可以改变为任意数 题解: 官方题解讲的很清楚 1010 The All-purpos ...

  8. hdu_5690_All X(找循环节)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5690 题意: Problem Description F(x, m)F(x,m) 代表一个全是由数字x ...

  9. 无论url请求什么.都可以拼接class类名.实例化.传递get参数-->给当前控制器-->传递给抽象父类-->都交给抽象父类.这个方法去处理call_user_func_array()

    <?phpdefine('DS','/');define('A_PATH',str_replace('\\','/',dirname(__FILE__)).DS); //01获取到主程序目录cl ...

  10. Apache的最小配置

    以下配置是Apache的最小配置,路径为/usr/local/apache2/conf/include/lww.xhprof.conf <VirtualHost *:> ServerNam ...