題目描述
現在棋盤的大小不一定,由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 第三...