AcWing 2548 大胖子走迷宮(BFS

2022-05-26 20:54:17 字數 1916 閱讀 6840

小明是個大胖子,或者說是個大大胖子,如果說正常人占用 1×1 的面積,小明要占用 5×5 的面積。

由於小明太胖了,所以他行動起來很不方便。

當玩一些遊戲時,小明相比小夥伴就吃虧很多。

小明的朋友們制定了乙個計畫,幫助小明**。

計畫的主要內容是帶小明玩一些遊戲,讓小明在遊戲中運動消耗脂肪。

走迷宮是計畫中的重要環節。

朋友們設計了乙個迷宮,迷宮可以看成是乙個由 n×n 個方陣組成的方陣,正常人每次占用方陣中 1×1 的區域,而小明要占用 5×5 的區域。

小明的位置定義為小明最正中的乙個方格。

迷宮四周都有障礙物。

為了方便小明,朋友們把迷宮的起點設定在了第 3 行第 3 列,終點設定在了第 n−2 行第 n−2 列。

小明在時刻 0 出發,每單位時間可以向當前位置的上、下、左、右移動單位 1 的距離,也可以停留在原地不動。

小明走迷宮走得很辛苦,如果他在迷宮裡面待的時間很長,則由於消耗了很多脂肪,他會在時刻 k 變成乙個胖子,只占用 3×3 的區域。

如果待的時間更長,他會在時刻 2k 變成乙個正常人,只占用 1×1 的區域。

注意,當小明變瘦時迷宮的起點和終點不變。

請問,小明最少多長時間能走到迷宮的終點。

注意,小明走到終點時可能變瘦了也可能沒有變瘦。

輸入格式

輸入的第一行包含兩個整數 n,k。

接下來 n 行,每行乙個由 n 個字元組成的字串,字元為+表示為空地,字元為*表示為阻礙物。

輸出格式

輸出乙個整數,表示答案。

資料範圍

1≤n≤300,

1≤k≤1000

輸入樣例:

9 5

+++++++++

+++++++++

+++++++++

+++++++++

+++++++++

***+*****

+++++++++

+++++++++

+++++++++

輸出樣例:
16
bfs即可。注意:可以原地站著等到體積變小後再走,但只要體積變為1的話就只能走了。開乙個vis陣列標記走過的地方(因為繞了一圈繞回去不如在原地停留更優),以及必須用變之前的體積去判斷能否往下走而非用走過去變化後的體積判斷。

#include #include #include using namespace std;

int n, k;

char mp[305][305];

int ans = 0x3f3f3f3f;

int dir[4][2] = , , , };

bool vis[305][305] = ;

//之前不能通過的地方 過一段時間後沒準就能過去了 所以vis陣列..

struct node

;bool judge(int x, int y, int size)

}return 1;

}

queueq;

void bfs()

; q.push(start);

int cnt = 0;

while(q.size())

if (now.t < k) now.size = 5;

else if(now.t >= k && now.t < 2 * k) now.size = 3;

else now.size = 1;

if (now.size != 1)

;q.push(tmp);

}for (int i = 0; i < 4; i++)

;q.push(tmp);

vis[nx][ny] = 1;}}

}}int main()

2548 自然數積分解

題目描述 description 把自然數 分解為若干個自然數之積,輸出方案數。輸入描述 input description 自然數n,1 n 2000000000 輸出描述 output description 方案數樣例輸入 sample input 20 樣例輸出 sample output ...

2548 自然數積分解

時間限制 1 s 空間限制 32000 kb 題目等級 gold 題解把自然數 分解為若干個自然數之積,輸出方案數。輸入描述 input description 自然數n,1 n 2000000000 輸出描述 output description 方案數樣例輸入 sample input 樣例輸出...

HDU 2548 兩軍交鋒

話說遼軍與mca相峙多年,終於在乙個秋日的早晨爆發了一次大規模的衝突.情況是這樣子的,當天上午,由耶律 pacision領軍的遼軍忽然帶領數萬人馬浩浩蕩蕩向mca山殺來,而這時候駐紮在mca防守前線的是久經沙場的老將紀哥.紀哥得知這個訊息,立刻召集手下精英,前往阻擊遼軍.現已知遼軍前進速度 u 公尺...