【题目链接】

https://www.lydsy.com/JudgeOnline/problem.php?id=1054

【算法】

广度优先搜索

【代码】

#include<bits/stdc++.h>
using namespace std;
const int dx[] = {,,-,};
const int dy[] = {-,,,};
const int MAXS = << ; struct info
{
int mp[][];
int step;
} ; int i,j,k,goal,tx,ty,l,r,state;
int mp[][],g[][];
info q[MAXS];
info cur,tmp;
bool visited[MAXS]; inline bool valid(int x,int y)
{
return x > && x <= && y > && y <= ;
}
inline int get(int a[][])
{
int i,j,ret = ;
int b = ;
for (i = ; i <= ; i++)
{
for (j = ; j <= ; j++)
{
ret += a[i][j] * b;
b <<= ;
}
}
return ret;
} int main()
{ for (i = ; i <= ; i++)
{
for (j = ; j <= ; j++)
{
mp[i][j] = getchar() - '';
}
getchar();
}
getchar();
for (i = ; i <= ; i++)
{
for (j = ; j <= ; j++)
{
g[i][j] = getchar() - '';
}
getchar();
}
goal = get(g);
visited[get(mp)] = true;
if (visited[goal])
{
printf("0\n");
return ;
}
l = r = ;
memcpy(q[].mp,mp,sizeof(q[].mp));
q[].step = ;
while (l <= r)
{
cur = q[l];
l++;
for (i = ; i <= ; i++)
{
for (j = ; j <= ; j++)
{
if (cur.mp[i][j] == )
{
for (k = ; k < ; k++)
{
tx = i + dx[k];
ty = j + dy[k];
if (valid(tx,ty) && cur.mp[tx][ty] == )
{
swap(cur.mp[i][j],cur.mp[tx][ty]);
state = get(cur.mp);
if (!visited[state])
{
visited[state] = true;
if (state == goal)
{
printf("%d\n",cur.step+);
return ;
}
r++;
memcpy(q[r].mp,cur.mp,sizeof(q[r].mp));
q[r].step = cur.step + ;
}
swap(cur.mp[i][j],cur.mp[tx][ty]);
}
}
}
}
}
} return ; }

【HAOI 2008】 移动玩具的更多相关文章

  1. [BZOJ 1054][HAOI 2008]移动玩具 状态压缩

    考试的时候一看是河南省选题,觉得会很难,有点不敢想正解.感觉是个状压.但是一看是十年前的题,那怂什么! 直接把十六个数的状态压进去,因为个数是不变的,所以状态枚举的时候只要找数目一样的转移即可.而且只 ...

  2. [ HAOI 2008 ] 玩具取名

    \(\\\) \(Description\) 在一个只有\(W,I,N,G\)的字符集中,给出四个字符的若干映射,每个映射为一个字符映射到两个字符,现给你一个假定由一个字符经过多次映射产生的字符串,问 ...

  3. BZOJ 1010 (HNOI 2008) 玩具装箱

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MB Submit: 12665 Solved: 5540 [Submit][S ...

  4. [HAOI 2008]木棍分割

    Description 题库链接 有 \(n\) 根木棍,第 \(i\) 根木棍的长度为 \(L_i\) , \(n\) 根木棍依次连结了一起,总共有 \(n-1\) 个连接处.现在允许你最多砍断 \ ...

  5. [HAOI 2008]硬币购物

    Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请问每次有多少种付款方法. Input 第一 ...

  6. [HAOI 2008]糖果传递

    Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数nn<=1'000'000,表示小朋友的个 ...

  7. 【HAOI 2008】 硬币购物

    [题目链接] 点击打开链接 [算法] 此题是一道好题! 首先,我们发现 : 付款方法数 = 不受限制的方法数 - 受限制的方法数 那么,我们怎么求呢? 我们用dp求出不受限制的方法数(f[i]表示买i ...

  8. [ HAOI 2008 ] 圆上的整点

    \(\\\) Description 给出一个整数 \(r\) ,求圆 \(x^2+y^2=r^2\) 上的整点数. \(r\le 2\times 10^9\) \(\\\) Solution 神题. ...

  9. 【HAOI 2008】 糖果传递

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1045 [算法] 环形均分纸牌问题 [代码] #include<bits/std ...

随机推荐

  1. Windows7环境下Composer 安装包的Cache目录位置

    http://segmentfault.com/a/1190000000355928 https://getcomposer.org/doc/ 要说Composer的用法,以后再说,现在只记录wind ...

  2. 精确获取对象的类型:Object.prototype.toString()

    https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/toString

  3. css中background-origin属性的使用

    background-origin用来规定元素背景图像的相对定位位置,它有三个属性值: 1.border-box border-box表示元素背景图像相对于border区域开始定位. 代码如下: &l ...

  4. bootstrap模态框和select2合用时input无法获取焦点(转)

    在bootstrap的模态框里使用select2插件,会导致select2里的input输入框没有办法获得焦点,没有办法输入. 解决方法: 1. 把页面中的  tabindex="-1&qu ...

  5. 三维重建7:Visual SLAM算法笔记

    VSLAM研究了几十年,新的东西不是很多,三维重建的VSLAM方法可以用一篇文章总结一下. 此文是一个好的视觉SLAM综述,对视觉SLAM总结比较全面,是SLAM那本书的很好的补充.介绍了基于滤波器的 ...

  6. Type inference

    Type inference refers to the automatic detection of the data type of an expression in a programming ...

  7. PyCharm for Mac 调整字体大小

    网上的教程大多已过时,那个路径根本找不到,于是就有了本文. 前言 以前用 Sublime 时,直接快捷键CMD+[+/-](CMD加加号或减号)直接调整字体大小,非常方便,后来用 VSCode,字体大 ...

  8. XML-20100: (Fatal Error) Expected ';'. xml转word 导出时异常

    因为数据中包含特殊字符.需要进行转译. < < 小于号 > > 大于号 & & 和 &apos; ’ 单引号 " " 双引号 XML ...

  9. Linux文件压缩命令笔记

    1.gzip/gunzip gzip/gunzip:主要是进行单个文件的压缩和解压缩的命令. 示例:gzip hello.txt #执行压缩hello.txt ls hello.txt.gz #查看文 ...

  10. SQL语句注意得问题

    1/不要使用count(列明)或count(常量)来替代count(*),count(*)是SQL92定义得标准统计行数得语法,跟数据库无关,跟NULL和非NULL无关. 说明:count(*)会统计 ...