我不會放進來 就是馬走日 當前位置可以跳到八個新狀態 玩沒玩過象棋都懂吧。。。。題目和**如下
現有一200*200大小的西洋棋棋盤,棋盤中僅有乙個馬,給定馬的當前位置(s)和目標位置(t),求出馬最少需要多少跳才能從當前位置到達目標位置。
輸入:
本題包含多個測例。輸入資料的第一行有乙個整數n(1<=n<=1000),表示測例的個數,接下來的每一行有四個以空格分隔的整數,分別表示馬當前位置及目標位置的橫、縱座標c(x,y)和g(x,y)。座標由1開始。
輸出:
對於每個測例,在單獨的一行內輸出乙個整數,即馬從當前位置跳到目標位置最少的跳數。
輸入樣例:
21 1 2 1
1 5 5 1
輸出樣例:
34
#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 ...