1. 八数码
    1 问题描述
    有33 共9 个格子,其中有一个格子是空的,其他格子填满了18 之间不同的数字。通过
    移动格子可以改变数字和空格的位置,现在给你初状态和末状态,请你给出最少的移动步数。
    2 输入格式
    输入文件名为 eight. in。
    给出6 行,每行有3 个数,每两个数用一个空格空开,每个数在08 之间,其中0 表示空
    格。
    前3 行表示初始状态,后3 行表示目标状态。
    3 输出格式
    输出文件名为eight.out。
    输出一行一个数,表示从初始状态移动到目标状态的最少步数。
    如果无解则输出?1。
    4 样例
    见下发/eight/eight.in(out)。
    样例解释见下发/eight/eight.jpg。

这道题还是一道挺经典的广搜,再用点康托展开或者map的判重
具体看代码

#include<bits/stdc++.h>
using namespace std;
int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1};
int a[500000][4][4],b[4][4],ai,aj,f[400000],o[10],fx[400000],fy[400000],c[10][10],ha;
map<int,bool> mp;
int main()
{freopen("eight.in","r",stdin);freopen("eight.out","w",stdout); int ss=0;for (int i=1; i<=3; i++)for (int j=1; j<=3; j++){scanf("%d",&a[1][i][j]);ss=ss*10+a[1][i][j];if (a[1][i][j]==0) {ai=i; aj=j;}}//读入初始状况,记录0的位置 mp[ss]=true;   for (int i=1; i<=3; i++)for (int j=1; j<=3; j++)scanf("%d",&b[i][j]);//终点 int h=0,t=1;fx[t]=ai,fy[t]=aj;//广搜,0的位置入队 while (h<=t){h++;bool pp;for (int k=0; k<4; k++){int x=fx[h]+dx[k],y=fy[h]+dy[k];//四个方向拓展 if (x<1||y<1||x>3||y>3) continue;for (int l=1; l<=3; l++)for (int p=1; p<=3; p++)c[l][p]=a[h][l][p];//记录一个数组用来判断新的这种移动是否合法 int u=c[x][y];c[x][y]=c[fx[h]][fy[h]];c[fx[h]][fy[h]]=u;//移动等于交换0和它相邻的某个数字 int s=0;for (int l=1; l<=3; l++)for (int p=1; p<=3; p++)s=s*10+c[l][p];//把数组压成十进制 ,容易判重 if (mp[s]==false)//map判重 {mp[s]=true;t++;fx[t]=x,fy[t]=y;f[t]=f[h]+1;//记录移动次数 pp=false;for (int l=1; l<=3; l++)for (int p=1; p<=3; p++){a[t][l][p]=c[l][p];if (a[t][l][p]!=b[l][p]) pp=true;}//如果合法那么就是新状态,每次和终点比较一下,如果成立就可以 if (pp==false) {cout<<f[t]; return 0;}}}}cout<<"-1";
}

2018.10.2模拟赛相关推荐

  1. 2018.10.9模拟赛

    2018.10.9模拟赛 T1 trade 正解:贪心 据说lyd讲过但并没有印象QAQ,考场上现推浪费了不少时间 其实就开个小根堆,每次把堆顶取出来看它是不是比当前的 a[i]a[i]a[i] 小, ...

  2. 2018,10,19模拟赛

    jz的题...写炸了不少暴力...还有容斥等不太熟练 T1以为n^2*m过不去,想了好久 归根到底还是我太蒻了qwq 存一下代码 t1 为了稳一点写了部分分...还没删,可以自行跳过ovo #incl ...

  3. tarjan+拓扑序+差分--2018.10.16模拟赛T2

    题目: 阿天住的城市有 n 个政府部门,这些部门之间用了 m 条有向路径 连接了起来.有趣的是,每过一天这些路径都会变换方向,也就是说, 偶数的日子和奇数的日子的图是不同的. 阿天在社保局工作,可惜他 ...

  4. 2018.10.31模拟赛

    T1 lgg L 君和 G 君在玩一个游戏.G 君写下一个字符串 A,L 君将其复制一遍连接到 A 串后面得 到字符串 B, G 君又在 B 的任意位置(包括首尾)插入一个字符得到字符串 C.现在你得 ...

  5. 【比赛报告】2018.10.15校赛[2015-9-13 NOIP模拟赛 by hzwer] NOIP练习赛卷十四

    比赛时间:2018.10.15 选手:lrllrl 用时:2h 得分:100+10+90=200 最初想法是一个背包问题.首先背包问题的模型肯定是不行的,但是我们可以列出状态转移方程后发现,每个状态决 ...

  6. 8月10日模拟赛题解

    前言 这次模拟赛应该是暑假以来最水的一场了,然而本来至少 210210210 的分数愣是被我弄成了 141141141,原因竟然是: const int MAXM = 5e5 + 5;struct e ...

  7. 2020/10/31模拟赛

    CSP第二轮前模拟赛 我太菜了 T1 题目描述 奶牛们对围栏的高度非常敏感.奶牛希望围栏高度既不太矮以至于他们没有安全感,也不太高以至于她们看不见围栏外的天地.所以每头奶牛都有自己喜欢的高度.奶牛有N ...

  8. 【比赛报告】2018.10.11校赛[8-2情人节欢乐赛] NOIP练习赛卷十二

    比赛时间:2018.10.10 选手:lrllrl 成绩 100+100+100=300 用时:约1h T1 果实计数 显然易得,答案为 b n m o d    k b^n\mod k bnmodk ...

  9. 【2018.3.10】模拟赛之三-ssl2576 平台

    目录地址 前言 水题不想说,连自带快排都懒得用了 正题 有n个平台,每个平台头尾有两根柱子支撑到地板或另一个平台上,求支撑平台需要的柱子数 输入输出(需要自取) Input 输入文件platforme ...

最新文章

  1. 创智播客微服务_传智播客2018JavaEE IDEA版本
  2. 如何制作可以在 MaxCompute 上使用的 crcmod
  3. Introduce Parameter Object(引入参数对象)
  4. python中调用C++函数
  5. ubuntu 国内源
  6. 苹果mac虚拟机软件:Parallels Desktop 17(pd虚拟机)Intel专用版
  7. 苹果Mac图片墙制作软件:FigrCollage
  8. JavaScript里的数组转化新方法Array.From
  9. 高等数学在计算机的应用论文,(高等数学论文计算机软件及应用.doc
  10. SURF特征提取(使用matlab自带函数)
  11. 如果在Flutter Web项目中使用lottie动画
  12. MDI Jade6的安装(含ocx控件的安装、PDF索引建立、修改注册表)
  13. 21CN推出免费10G邮箱
  14. IDEA2018版本相关配置
  15. 如何在Docker容器里开启fail2ban防止SSH暴力破解
  16. The_Last_Geass
  17. 车联网通信安全之 SSL/TLS 协议
  18. Shell学习--echo命令
  19. c语言15除以2得到8,C语言程序设计100例之(15):除法算式
  20. 大豆烘干设备原理,大豆烘干步骤

热门文章

  1. git pul的使用
  2. python+pysimplegui+socket开发登录聊天室
  3. iOS内存管理 —— 自动释放池和runloop
  4. GIS的核心价值——服务
  5. 亡命威龙评测:像城管一样开警车
  6. oracle忘记某个用户密码,Oracle忘记用户名密码怎样恢复
  7. Oracle数据库数据备份导出导入
  8. 三维动画在计算机上的应用,三维动画设计有哪些应用
  9. 《圣斗士星矢》的武士道精神
  10. Unity Shader 卡通渲染 (五):仿日式赛璐珞风格 Shader(顶点外扩描边)