中國象棋中的跳馬問題 bfs

2021-08-03 20:58:25 字數 1251 閱讀 9823

現在棋盤的大小不一定,由p,q給出,並且在棋盤中將出現障礙物(限制馬的行動,與象棋走法相同)

第一行輸入n表示有n組測試資料。

每組測試資料第一行輸入2個整數p,q,表示棋盤的大小(1<=p,q<=100)。

每組測試資料第二行輸入4個整數,表示馬的起點位置與終點位置。(位置的取值範圍同p,q)

第三行輸入m表示圖中有多少障礙。

接著跟著m行,表示障礙的座標。

馬從起點走到終點所需的最小步數。

如果馬走不到終點,則輸入「can not reach!」

2

9 10

1 1 2 3

09 10

1 1 2 3

81 2

2 23 3

3 41 4

3 22 4

1 3

1

can not reach!

此題是乙個搜尋題,可用dfs或bfs,建議選擇bfs(廣搜)。一開始把馬的起始點加入佇列,然後用廣搜的思想把此點能到達的其他點加入佇列,這裡需要乙個陣列用來記錄此點在之前是否已經加入佇列,如果加入過佇列當中,就不需要再加入了,直到佇列裡的元素為空,或者搜尋到了終點,搜尋即停止,然後輸出相應答案即可。

#include #include #include #include using namespace std;

int num[6];

bool visti[101][101];

struct postion2

;struct postion1

;postion1 dir[8]= ,,,,,,,};

//postion1 dir2[8]= ,,,,,,,};

postion1 dir2[8]= ,,,}; //象棋中馬的走法有限制

queueque;

int zhangai[101][101];

int ans=0,m;

int p,q; //棋盤大小

bool check(int a,int b)

int bfs()}}

return -1;

}int main()

ans=bfs();

if (ans!=-1)

printf("%d\n",ans);

else

printf("can not reach!\n");

}return 0;

}

中國象棋中的跳馬問題(BFS)

題目描述 現在棋盤的大小不一定,由p,q給出,並且在棋盤中將出現障礙物 限制馬的行動,與象棋走法相同 輸入第一行輸入n表示有n組測試資料。每組測試資料第一行輸入2個整數p,q,表示棋盤的大小 1 p,q 100 每組測試資料第二行輸入4個整數,表示馬的起點位置與終點位置。位置的取值範圍同p,q 第三...

中國象棋的跳馬問題(BFS)

題目描述 現在棋盤的大小不一定,由p,q給出,並且在棋盤中將出現障礙物 限制馬的行動,與象棋走法相同 輸入 第一行輸入n表示有n組測試資料。每組測試資料第一行輸入2個整數p,q,表示棋盤的大小 1 p,q 100 每組測試資料第二行輸入4個整數,表示馬的起點位置與終點位置。位置的取值範圍同p,q 第...

中國象棋跳馬問題 bfs寫法

問題大意 給定乙個棋盤以及馬的初始位置和需要到達的終點,棋盤中含有障礙,求馬到終點的最短步數,如果不能到達,則輸出 can not reach 解題思路 bfs直接搜尋即可。標準搜尋模板題,這裡順便講一下bfs。bfs是以初始狀態向能走的所有狀態進行層次遍歷。未知的讀者可以按著我這個思路在紙上畫一下...