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

2021-08-04 10:42:51 字數 1308 閱讀 5805

題目描述

現在棋盤的大小不一定,由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

0 9 10

1 1 2 3

8 1 2

2 2

3 3

3 4

1 4

3 2

2 4

1 3

樣例輸出

1 can not reach!

解題思路:求解最短路線自然想到bfs(),馬有八個方向可以進行選擇,馬的蹩腳有四種選擇,那麼過濾掉撇腳的情況,並且記錄下一點是否已經走過,又或者是否存在障礙物(判重),即可解決問題。

#include 

#include

#include

#include

#include

const

int maxsize =1000000;

using

namespace

std;

int p,q;

int vis[104][104];

typedef

struct nowpt

nowpt;

queue

q;nowpt st,goal;

typedef

struct fangxiang

fangxiang;

fangxiang zoufa,,,,,,,};//走的位置

int judge(nowpt p,fangxiang f) //判斷移動是否可取

}return0;}

int bfs()

}} return -1;

}int main()

int sum1=bfs();

if(sum1==-1) printf("can not reach!");

else

printf("%d",sum1);

if(n!=0) printf("\n");

}}

中國象棋跳馬問題 bfs寫法

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

中國象棋中的跳馬問題 bfs

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

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

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