time limit: 10 secmemory limit: 162 mb
submit: 1893solved: 1051
在乙個5×5的棋盤上有12個白色的騎士和12個黑色的騎士, 且有乙個空位。在任何時候乙個騎士都能按照騎
士的走法(它可以走到和它橫座標相差為1,縱座標相差為2或者橫座標相差為2,縱座標相差為1的格仔)移動到空
位上。 給定乙個初始的棋盤,怎樣才能經過移動變成如下目標棋盤: 為了體現出騎士精神,他們必須以最少的步
數完成任務。
第一行有乙個正整數t(t<=10),表示一共有n組資料。接下來有t個5×5的矩陣,0表示白色騎士,1表示黑色騎
士,*表示空位。兩組資料之間沒有空行。
對於每組資料都輸出一行。如果能在15步以內(包括15步)到達目標狀態,則輸出步數,否則輸出-1。
210110
01*11
10111
01001
00000
01011
110*1
01110
01010
001007-1
/*心若向陽,無謂悲傷迭代加深dfs經典題!
記錄目標狀態,然後從起始狀態搜尋。
爆搜可能超時,要加剪枝
*/#include
#include
#include
#define limit 15
using
namespace
std;
int t,ans=20
,flag;
int xx[9]=;
int yy[9]=;
int s[10][7],get[10][10
];int target[10][10
];char
si;void get_t()//
記錄目標狀態
int judge()//
計算當前狀態與目標狀態至少還有多少步
return
ret;
}void dfs(int now,int x,int y,int
sum)
if(now-1+c>sum) return;//
最優性剪枝:當前的步數+差異》限制步數
for(int i=1;i<=8;i++)
}}int
main()
else
get[i][j]=si-'0'
; }
for(int k=0;k<=limit;k++)//
迭代加深限制步數
if(ans<=15)printf("
%d\n
",ans);
else printf("
-1\n");
}return0;
}
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的格仔 移動到空位上。給定乙個初始的棋盤,怎樣才能經過移動變成如下目標棋盤 為了體現出騎士精神,他們必須以最少的...