在乙個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
如果沒有學過a*啟發式搜尋,那麼可以去網上搜一下折半搜尋、雜湊還有打表的程式,這裡給a*做法。
關於a*演算法,這裡給乙個鏈結,講的就是關於a*演算法的一些應用
然後就是關於這道題:顯然的是,如果我們選擇去移動棋子,那麼產生的分支就會非常多非常多,所以我們採用類似華容道一題的思想,我們移動空格,顯然,這樣做分支少了很多。
#includeusing namespace std;
const int maxn=8;
int base[5][5]=;
char a[maxn];
int dx[8]=;
int dy[8]=;
int ma[5][5],ans;
bool flag;
bool a_star(int s)
return 1;
}bool complete()
void dfs(int x,int y,int bs)
for(int i=0;i<8;++i) }
}int main()
else
ma[i][j]=a[j]-'0';
}} flag=true;
for(ans=0;ans<=15;++ans)
}if(flag)
printf("-1\n");
} return 0;
}
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的格仔 移動到空位上。給定乙個初始的棋盤,怎樣才能經過移動變成如下目標棋盤 為了體現出騎士精神,他們必須以最少的...