【問題描述】
在乙個5×5的棋盤上有12個白色的騎士和12個黑色的騎士, 且有乙個空位。在任何時候乙個騎士都能按照騎士的走法(它可以走到和它橫座標相差為1,縱座標相差為2或者橫座標相差為2,縱座標相差為1的格仔)移動到空位上。 給定乙個初始的棋盤,怎樣才能經過移動變成如下目標棋盤: 為了體現出騎士精神,他們必須以最少的步數完成任務。
210110
01*11
10111
01001
00000
01011
110*1
01110
01010
00100 7
-1 這題為scoi2005的題,首先看到這一題,以為是廣搜,結果發現搜尋樹太大了,用佇列會炸,於是想到了迭代加深。
把答案作為加深的物件,不斷的對答案+1,然後我們可以利用估價函式減小搜尋的範圍,其實就打乙個深搜出來就行了。
1const 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的格仔 移動到空位上。給定乙個初始的棋盤,怎樣才能經過移動變成如下目標棋盤 為了體現出騎士精神,他們必須以最少的...