洛谷P4289 移动玩具

本人CSDN处女作,exciting!!!
前言:
在初二这个生地会考充斥的可怕的环境中,我非常愉快的鼓起勇气,在10点钟写完作业后,十分勇敢的刷了一道题…(kao!!!) 害得我11点半才睡>_<.
------------------------------------------前方高能分割线-------------------------------------------------------题目:
题目描述
在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动次数将初始的玩具状态移动到某人心中的目标状态。

输入输出格式
输入格式:
前4行表示玩具的初始状态,每行4个数字1或0,1表示方格中放置了玩具,0表示没有放置玩具。接着是一个空行。接下来4行表示玩具的目标状态,每行4个数字1或0,意义同上。

输出格式:
一个整数,所需要的最少移动次数。

输入输出样例
输入样例#1: 复制
1111
0000
1110
0010

1010
0101
1010
0101
输出样例#1: 复制
4

题解:
初看题目,果断BFS,然后这题主要问题成了如何判重和进行转移。看到这一堆0,1之后,果断——二进制运算。
(补充:任意一个整数都有唯一的二进制分解形式,任意一个二进制分解对应一个整数);
代码如下(写得比较简单,大佬勿喷

#include 
#include 
using namespace std;
struct tnode{ int num,d;};
int start,end;
int used[100000];
inline void bfs() //广搜 
{
	queue  q;
	tnode t;
	t.num=start;t.d=0;
    q.push(t);
    while(!q.empty()) 
    {
        tnode tt=q.front(); q.pop();
        int tmp=tt.num;
        if(tmp==end){cout<=0;i--)   
        {
            int x=(15-i)/4,y=(15-i)%4,w=1<=0;i--) 
	{
        cin>>c;
        if(c^48)  start+=1<=0;i--) 
	{
        cin>>c;
        if(c^48)  end+=1<

你可能感兴趣的:(BFS)