程式設計題 推箱子

2021-08-14 07:13:58 字數 1536 閱讀 2578

內容會持續更新,有錯誤的地方歡迎指正,謝謝!

大家一定玩過「推箱子」這個經典的遊戲。具體規則就是在乙個n*m的地圖上,有1個玩家、1個箱子、1個目的地以及若干障礙,其餘是空地。玩家可以往上下左右4個方向移動,但是不能移動出地圖或者移動到障礙裡去。如果往這個方向移動推到了箱子,箱子也會按這個方向移動一格,當然,箱子也不能被推出地圖或推到障礙裡。當箱子被推到目的地以後,遊戲目標達成。現在告訴你遊戲開始是初始的地圖布局,請你求出玩家最少需要移動多少步才能夠將遊戲目標達成。

輸入描述:

每個測試輸入包含1個測試用例

第一行輸入兩個數字n,m表示地圖的大小。其中0輸出描述:

輸出乙個數字表示玩家最少需要移動多少步才能將遊戲目標達成。當無論如何達成不了的時候,輸出-1。

輸入例子1:

4 4

....

..*@

....

.x..

輸出例子1:

3輸入例子2:

6

6...

#........

#*##..

..##.#

..x...

.@#...

輸出例子2:

11人是有四個前進方向的,而箱子的前進方向由人遇見他的時候決定。

核心流程:

人走到了乙個點,需要先判斷該點是不是牆,出沒出界,是牆或出界就用continue終止該次迴圈;再判斷這個點是不是箱子,若是,那麼箱子要與人同樣的方向移動一步;最後再判斷箱子的位置是否都滿足既不是牆,也不出界。

開個四維陣列visit,前面兩維記錄人的x、y,另外兩維記錄箱子的x、y。

顯而易見,這就是乙個bfs,何為bfs?請見下方**:

bfs**框架:

#include 

#include

using

namespace

std;

int n,m;//存地圖大小

char maparray[10][10];//地圖資訊,一定要定義為char型別!

int i,j;

int visit[10][10][10][10];//節點的訪問標記(也就是是否經歷過這種情況)

int direct[4][2]=;//四個前進方向

struct nodepoint//方便統一初始化、方便呼叫這些值

};int bfs(int peopleposx,int peopleposy,int boxposx,int boxposy)//bfs演算法

}return -1;

}int main()

}cout

<< bfs(peopleposx,peopleposy,boxposx,boxposy)

0;}

推箱子遊戲

大一寒假 1.寫 時我犯了乙個很大的錯誤 不然早就搞定了 把 與 混淆了 大忌啊 2.這裡實現了數位化編碼 3.上72 下80 左75 右77 4.特殊圖形可以到qq拼音符號裡獲取 include include include define x 1 人的位置 define y 5 define n...

推箱子遊戲

本專案開發環境為vs2017 c 對推箱子遊戲的觀察可以發現,該遊戲就是在乙個頁面對進行移動的操作。因此可以定義乙個二維陣列map,進行初始化。0 空地 1 牆壁 3 箱子的目的地 4 箱子 6 人 7 箱子與目的地重合 9 人在箱子目的地。如下 include include include in...

C實現推箱子

推箱子遊戲編寫思路總結 1.顯示遊戲地圖 2.顯示小人移動的方向 3.移動小人 第一 簡單的介面輸出時可以用指標陣列,指標陣列map中含十個指標map 0 map 1 map 9 分別是這是個字串的起始位址 char map row 但最後改變位置時不太方便,還是使用c以二維陣列輸出比較簡潔。第二 ...