點這裡 開啟題目鏈結 點選開啟鏈結
題目就是我們玩過的推箱子;
一頓暴力廣搜;加狀態標記。狀態壓縮需要用到乙個類似於康拓的思想來壓縮;所以容易tle,搜尋就是用乙個int型的數字來表示乙個狀態,
壓縮的和**
voidset_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以二維陣列輸出比較簡潔。第二 ...