推箱子 Sokoban(華中農業比賽)

2022-03-01 07:08:34 字數 2201 閱讀 4501

點這裡 開啟題目鏈結   點選開啟鏈結

題目就是我們玩過的推箱子;

一頓暴力廣搜;加狀態標記。狀態壓縮需要用到乙個類似於康拓的思想來壓縮;所以容易tle,搜尋就是用乙個int型的數字來表示乙個狀態,

壓縮的和**

void

set_c()

}int binary_cantor(int num,int

g) }

return

ans;

}

值得注意判斷死角是相鄰的兩個方向不能夠移動。

剩下的在完整**中說明。

#include #include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;const

int inf=2e9+1e8;

const

int mod=1e9+7

;const

int mm=10

;const

int vis=1081575*25+100

;const

int len=1081575+2

;int n,m,dir[4][2]= ,,,};//

最好是讓dir陣列順時針或者逆時針 方向轉動

string push_sokoban;//

記錄地圖中哪些地方有槍

int c[30][30];//

組合數int aim; //

用乙個二進位制位記錄倉庫的位置

bool vis[vis]; //

標記狀態的陣列

struct

point

;struct

node

;void set_c()//

遞推列印組合數;

}int binary_cantor(int num,int g)//

壓縮狀態; 表示num這個數有g位二進位制位為1 返回的數字表示num這個數在他們的排列中第幾小

}return

ans;

}bool is_out(int x,int y)//

是否越界

/**************************

*///

一維 與 二維 座標的相互轉化

int change(int x,int

y)int

change(point p)

point change(

intx)

/***************************

*/bool is_arrive(int box,int pos,int num)//

判斷該狀態是否來過

return

false;}

bool check_dead(int box,int bpos)//

是否進入死角,死角意味著, 該箱子未到倉庫,且無法移動

}return

true;}

//下面就是廣搜核心了

int bfs(int pos,int box,int number)//

全域性變數注意清零

}else

if(!(box&(1}}

}return -1;}

/**************************

本題難點就在與狀態壓縮,如何給定乙個數,給定二進

制位1的個數,快速判斷第幾小,有點康拓的感覺

******************************************

*/int main(void

) push_sokoban+=s;

}//cout<(aim) %d\n

",bfs(man_pos,box,num));

}return0;

}

康拓的題目,詳見  點選開啟鏈結

推箱子遊戲

大一寒假 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以二維陣列輸出比較簡潔。第二 ...