子用「b」標記。乙個可行的移動序列在圖中用數字標記出來(al,b3,a5,c6,e5,94,h2,fl),總共需要7步才能完成。事實上,這也就是
最小的步數了。
輸入檔案包括1個或多個測試資料。
每1個測試資料的第1行是乙個整數b(-1≤b≤62),表示棋盤中有障礙物的格仔數目,當b=-1時,輸入檔案結束;
第2行含b個不同的有障礙物的格仔編號,用空格隔開。當b=0 時,此行為空行;
第3行是騎士的初始格仔和目標格仔的編號,也是用空格隔開。初始格仔和目標格仔是不同的,且都沒有障礙物。
對於每個資料,輸出1行。格式:board n:m moves,其中n表示資料的序號(從1開始),m表示騎士所用的最小的步數。如果騎士無法到達目標格仔,輸出:board n:not reachable。
8c5 b4 c1 b2 e1 e5 f4 f2
d3 h8
8e8 e7 e6 e5 e4 e3 e2 e1
d3 h8
-1
board 1: not reachableboard 2: 3 moves
#include #include帥得不要不要的#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define pi acos(-1.0)
#define inf 0x3f3f3f3f
using
namespace
std;
intn,m,flag,a,b;
int dis[8][2]= ;
int vis[15][15
];int w[15][15
];string
str;
struct
man;
queue
q;void bfs(man s,int enx,int
eny)
for(int i=0; i<8; i++)}}
}int
main()
string
sta,en;
cin>>sta>>en;
man s;s.x=sta[0]-'
a';s.y=sta[1]-'
1';s.step=0
;q.push(s);
enx=en[0]-'
a';eny=en[1]-'1'
; printf(
"board %d:
",cnt);
bfs(s,enx,eny);
if(flag==0)puts("
not reachable");
}return0;
}
騎士旅行問題(騎士走棋盤)
問題描述 乙個騎士在棋盤中,給予其乙個初始位置,求其是否能夠走完整個棋盤。騎士的走法和中國象棋的馬走法相同,在前進過程中,騎士在其落足過的地方不能再次落足。如下 騎士走棋盤問題,騎士的走法與象棋中馬的走法相同,要求騎士便利棋盤中所有的點,但不能重複走乙個點兩次 本題採用優先選擇 回溯到方法進行,每次...
騎士遍歷問題
問題描述 在8 8方格的棋盤上,從任意指定的方格出發,為象棋中的馬尋找一條走遍棋盤每一格並且只經過一次的一條路徑 馬走 日 字 1 馬有8個方向可以行走,因此把八個方向用陣列儲存起來 2 在主函式中,對每乙個方格作為起點對整個棋盤進行回溯遍歷 3 在回溯過程中,要注意每一層的結尾對資料進行復原。以下...
騎士周遊問題
問題 給定乙個n n的棋盤,乙個馬從任意位置出發,按照馬移動的規則,在不重複走任意乙個點的前提下走完所有點,即跳n n步以後需要遍歷了整個棋盤。思路 首先就是暴力搜尋,dfs 回溯。include include include using namespace std const int n 8 棋...