騎士問題 knight BFS

2022-10-11 14:42:11 字數 1531 閱讀 9303

子用「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。

8

c5 b4 c1 b2 e1 e5 f4 f2

d3 h8

8e8 e7 e6 e5 e4 e3 e2 e1

d3 h8

-1

board 1: not reachable

board 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 棋...