bzoj1085騎士精神(搜尋)

2022-04-06 04:55:43 字數 1480 閱讀 6185

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的格仔 移動到空位上。給定乙個初始的棋盤,怎樣才能經過移動變成如下目標棋盤 為了體現出騎士精神,他們必須以最少的...