bzoj1054 HAOI2008 移動玩具

2021-08-21 05:44:44 字數 596 閱讀 5956

題目

題目很簡單,二進位制壓縮成16位,然後bfs就好,但是有兩個坑點,需要注意一下。

1.bfs時搜尋i-1,i+1時,目的是搜尋左邊那列和右邊那列,但是當i%4==0或i%4==3時會到上一行或者下一行

2.對於一些做法,目標狀態與起始狀態相等時會有錯誤

#include

using

namespace

std;

int i,j,x,y,h,t,q[1

<<16],dis[1

<<16],tmp,v,u,fl;

char s[5];

void pd(int x)

int main()

for (i=0;i<4;i++)

h=0;t=1;q[0]=x;dis[x]=1;

while (hfor (i=0;i<16;i++)

if (u&(1

<1

if ((i&3)<3) pd(i+1);

if (i>3) pd(i-4);

if (i<12) pd(i+4);

if (dis[y])}}

}

Bzoj 1054 HAOI2008 移動玩具

在乙個4 4的方框內擺放了若干個相同的玩具,某人想將這些玩具重新擺放成為他心中理想的狀態,規定移動時只能將玩具向上下左右四個方向移動,並且移動的位置不能有玩具,請你用最少的移動次數將初始的玩具狀態移動到某人心中的目標狀態。前4行表示玩具的初始狀態,每行4個數字1或0,1表示方格中放置了玩具,0表示沒...

bzoj1054 HAOI2008 移動玩具

無聊時想練一下構圖又懶得打廣搜 發現狀態只有2 16種 於是根據相鄰狀態連邊 最多只有2 22條邊 極有可能不到 然後直接跑最短路即可 如下 include using namespace std define n 100005 define m 4200000 define inf 1000000...

bzoj1054 HAOI2008 移動玩具

description 在乙個4 4的方框內擺放了若干個相同的玩具,某人想將這些玩具重新擺放成為他心中理想的狀態,規定移動 時只能將玩具向上下左右四個方向移動,並且移動的位置不能有玩具,請你用最少的移動次數將初始的玩具狀態移 動到某人心中的目標狀態。input 前4行表示玩具的初始狀態,每行4個數字...