騎士精神(BZOJ1085) 題解

2021-07-09 09:35:41 字數 2471 閱讀 3251

【問題描述】

在乙個5×5的棋盤上有12個白色的騎士和12個黑色的騎士, 且有乙個空位。在任何時候乙個騎士都能按照騎士的走法(它可以走到和它橫座標相差為1,縱座標相差為2或者橫座標相差為2,縱座標相差為1的格仔)移動到空位上。 給定乙個初始的棋盤,怎樣才能經過移動變成如下目標棋盤: 為了體現出騎士精神,他們必須以最少的步數完成任務。

210110

01*11

10111

01001

00000

01011

110*1

01110

01010

00100 7

-1 這題為scoi2005的題,首先看到這一題,以為是廣搜,結果發現搜尋樹太大了,用佇列會炸,於是想到了迭代加深。

把答案作為加深的物件,不斷的對答案+1,然後我們可以利用估價函式減小搜尋的範圍,其實就打乙個深搜出來就行了。

1

const en:array[1..5] of string=('

11111

','01111

','00*11

','00001

','00000');

2 dx:array[1..8] of longint=(2,-2,1,1,-1,-1,2,-2

);3 dy:array[1..8] of longint=(1,1,-2,2,-2,2,-1,-1);4

var a:array [1..5] of string[5];5

h,r,i,n,j,w,ans,mini,x,y:longint;

6procedure swap(var

x,y:char);

7var

ch:char;

8begin

9 ch:=x;

10 x:=y;

11 y:=ch;

12end;13

procedure

dfs(x,y,dep,last:longint);

14var

i,j,d,xx,yy:longint;

15begin

16 d:=0;17

if mini<>-1

then

18exit;

19for i:=1to5

do20

for j:=1to5

do21

if a[i,j]<>en[i,j] then

22inc(d);

23if d=0

then

24begin

25 mini:=dep;

26exit;

27end;28

if ans-dep1

then

29exit;

30for i:=1to8

do31

begin

32if mini<>-1

then

33break;

34if i=9-last then

35continue;

36 xx:=x+dx[i];

37 yy:=y+dy[i];

38if (xx in[1..5])and(yy in[1..5]) then

39begin

40swap(a[x,y],a[xx,yy]);

41 dfs(xx,yy,dep+1

,i);

42swap(a[x,y],a[xx,yy]);

43end;44

end;

45end;46

begin

47readln(w);

48while w>0

do49

begin

50 a[1]:='';a[2]:='';a[3]:='';a[4]:='';a[5]:='';51

dec(w);

52for i:=1to5

do53

begin

54readln(a[i]);

55for j:=1to5

do56

if a[i,j]='*'

then

57begin

58 x:=i;

59 y:=j;

60end;61

end;

62 mini:=-1;63

for ans:=0

to15

do64

begin

65 dfs(x,y,0,-1

);66

if mini<>-1

then

67break;

68end;69

if mini=-1

then

70writeln(mini)

71else

72writeln(ans);

73end;74

end.

bzoj 1085 騎士精神

time limit 10 sec memory limit 162 mb submit 1461 solved 796 submit status discuss 在乙個5 5的棋盤上有12個白色的騎士和12個黑色的騎士,且有乙個空位。在任何時候乙個騎士都能按照騎士的走法 它可以走到和它橫座標相差...

BZOJ 1085 騎士精神 A

description 在乙個5 5的棋盤上有12個白色的騎士和12個黑色的騎士,且有乙個空位。在任何時候乙個騎士都能按照騎士的走法 它可以走到和它橫座標相差為1,縱座標相差為2或者橫座標相差為2,縱座標相差為1的格仔 移動到空位上。給定乙個初始的棋盤,怎樣才能經過移動變成如下目標棋盤 為了體現出騎...

bzoj1085 騎士精神 A

在乙個5 5的棋盤上有12個白色的騎士和12個黑色的騎士,且有乙個空位。在任何時候乙個騎士都能按照騎士的走法 它可以走到和它橫座標相差為1,縱座標相差為2或者橫座標相差為2,縱座標相差為1的格仔 移動到空位上。給定乙個初始的棋盤,怎樣才能經過移動變成如下目標棋盤 為了體現出騎士精神,他們必須以最少的...