BZOJ 1085 SCOI 2005 騎士精神

2021-07-09 21:10:42 字數 1088 閱讀 1849

之前聽說過ida*,好像很優越啊。

估價函式為不在目標位置的棋子個數。

列舉一遍最大搜尋深度即可。

還得好好斟酌一下要列舉的搜尋深度。。

344ms。。

#include #include using namespace std;

#define rep(i,j,k) for(int i=j;imaxdep) return 0;

if (h == 0) return 1;

if (h - 1 + dep > maxdep) return 0;

rep(i,0,8)

return 0;

}int main()

h = 0;

rep(i,0,5) rep(j,0,5)

h += mp[i][j] != tg[i][j];

for(k=0;k<16;k++)

if (ida(0, k, x, y, h))

if (k == 16) puts("-1");

}return 0;

}

time limit: 10 sec  

memory limit: 162 mb

submit: 1401  

solved: 766

在乙個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

bzoj1085 SCOI2005 騎士精神

此題用到了a 演算法以及迭代加深搜尋。其實做本題之前看到過這個東西,發現估價什麼的好複雜,一直不會用。但應用於本題很容易就能實現,只要和最終結果一一比對即可。演算法如下,借鑑了hzwer大神的寫法。include include using namespace std int ans 5 5 int...

BZOJ1085 SCOI2005 騎士精神

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

BZOJ 1085 SCOI2005 騎士精神

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