現在棋盤的大小不一定,由p,q給出,並且在棋盤中將出現障礙物(限制馬的行動,與象棋走法相同)
第一行輸入n表示有n組測試資料。
每組測試資料第一行輸入2個整數p,q,表示棋盤的大小(1<=p,q<=100)。
每組測試資料第二行輸入4個整數,表示馬的起點位置與終點位置。(位置的取值範圍同p,q)
第三行輸入m表示圖中有多少障礙。
接著跟著m行,表示障礙的座標。
馬從起點走到終點所需的最小步數。
如果馬走不到終點,則輸入「can not reach!」
29 10
1 1 2 3
09 10
1 1 2 3
81 2
2 23 3
3 41 4
3 22 4
1 3
1can 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是以初始狀態向能走的所有狀態進行層次遍歷。未知的讀者可以按著我這個思路在紙上畫一下...