跳馬 (和小老鼠走迷宮差不多)

2021-08-11 02:31:02 字數 1608 閱讀 8666



我不會放進來 就是馬走日 當前位置可以跳到八個新狀態 玩沒玩過象棋都懂吧。。。。題目和**如下

現有一200*200大小的西洋棋棋盤,棋盤中僅有乙個馬,給定馬的當前位置(s)和目標位置(t),求出馬最少需要多少跳才能從當前位置到達目標位置。

輸入:

本題包含多個測例。輸入資料的第一行有乙個整數n(1<=n<=1000),表示測例的個數,接下來的每一行有四個以空格分隔的整數,分別表示馬當前位置及目標位置的橫、縱座標c(x,y)和g(x,y)。座標由1開始。

輸出:

對於每個測例,在單獨的一行內輸出乙個整數,即馬從當前位置跳到目標位置最少的跳數。

輸入樣例:

2

1 1 2 1

1 5 5 1

輸出樣例:

3

4

#include

#include

using namespace std ;

queuex ;//橫座標佇列

queuey ;//縱座標佇列

int step[201][201] = ;//計算步數 本身帶有標記的作用

int n ;//n個測例

int c[1000] = ;//存一下n個測例的答案

int x1 , y1 , x2 , y2 ;//起點和終點的座標

void input() ;//輸入起點和終點

int bfs() ;//廣搜找答案

int canmoveto(int a , int b) ;//判斷是否可以跳步 1.不越界 2.不重複

void clean() ; //多個測例每次使用前上一次需要清空

int main()

for(i = 1 ; i <= n ; i++)

return 0 ;

} void input()

int bfs()

x1 = x.front() ; //訪問隊首橫座標

x.pop() ; //隊首橫座標出隊

y1 = y.front() ; //訪問隊首縱座標

y.pop() ; //隊首縱座標出隊

if(canmoveto (x1 - 1,y1 - 2))//八個狀態

if(canmoveto (x1 - 1,y1 + 2))

if(canmoveto (x1 + 1,y1 - 2))

if(canmoveto (x1 + 1,y1 + 2))

if(canmoveto (x1 - 2,y1 - 1))

if(canmoveto (x1 - 2,y1 + 1))

if(canmoveto (x1 + 2,y1 - 1))

if(canmoveto (x1 + 2,y1 + 1))

} }int canmoveto(int a , int b)

else //這個else讓我找了三個多小時的bug 我為了省事沒寫else 然後就呵呵了 老鐵們別偷懶

}void clean() //把步數和佇列清零

} while(!x.empty()) // 隊首一直出隊直到隊列為空

while(!y.empty())

}

老鼠走迷宮

說明 老鼠走迷宮是遞迴求解的基本題型,我們在二維陣列中使用2表示迷宮牆壁,使用1來表示老鼠的行走路徑,試以程式求出由入口至出口的路徑。解法 老鼠的走法有上 左 下 右四個方向,在每前進一格之後就選乙個方向前進,無法前進時退回選擇下乙個可前進方向,如此在陣列中依序測試四個方向,直到走到出口為止,這是遞...

老鼠走迷宮

老鼠走迷官 一 說明 老鼠走迷宮是遞迴求解的基本題型,我們在二維陣列中使用2表示迷宮牆壁,使用1來表 示老鼠的行走路徑,求出由入口至出口的路徑。解法 老鼠的走法有上 左 下 右四個方向,在每前進一格之後就選乙個方向前進,無法前 進時退回選擇下乙個可前進方向,如此在陣列中依序測試四個方向,直到走到出口...

老鼠走迷宮

參考 資料結構 胡昭民著 老鼠走迷宮 鏈棧實現 include include define north maze x 1 y 定義向北移動位置 define south maze x 1 y 定義向南移動位置 define west maze x y 1 定義向西移動位置 define east ...