內容會持續更新,有錯誤的地方歡迎指正,謝謝!
大家一定玩過「推箱子」這個經典的遊戲。具體規則就是在乙個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以二維陣列輸出比較簡潔。第二 ...