BZOJ1054 HAOI2008移動玩具 廣搜

2022-09-03 23:24:16 字數 1311 閱讀 9051

description

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

input

前4行表示玩具的初始狀態,每行4個數字1或0,1表示方格中放置了玩具,0表示沒有放置玩具。接著是乙個空行。接下來4行表示玩具的目標狀態,每行4個數字1或0,意義同上。

output

乙個整數,所需要的最少移動次數。

sample input

1111

0000

1110

0010

1010

0101

1010

0101

sample output

4分析:廣搜+雜湊優化

#include#include

#include

#include

using

namespace

std;

const

int dx[5]=;

const

int dy[5]=;

int ans[5][5

];int use[66666

];struct

nodeq[

80001

];int hash(int a[5][5

])

returns;}

intmain()

getchar();

}getchar();

for (int i=1; i<=4; i++)

getchar();

}int st=hash(q[1

].a);

int en=hash(ans);

if (st==en)

use[st]=1

;

int h=0,t=1

; q[

1].step=0

;

while (h<=t)

t++;

memcpy(q[t].a,q[h].a,

sizeof

(q[t].a));

q[t].step=q[h].step+1

; use[hh]=1

; }

swap(q[h].a[i][j],q[h].a[x][y]);}}

return0;

}

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個數字...