AcWing 172 立體推箱子(bfs)

2022-07-25 16:27:19 字數 2281 閱讀 3959

立體推箱子是乙個風靡世界的小遊戲。

遊戲地圖是乙個n行m列的矩陣,每個位置可能是硬地(用」.」表示)、易碎地面(用」e」表示)、禁地(用」#」表示)、起點(用」x」表示)或終點(用」o」表示)。

你的任務是操作乙個1×1×2的長方體。

這個長方體在地面上有兩種放置形式,「立」在地面上(1×1的面接觸地面)或者「躺」在地面上(1×2的面接觸地面)。

在每一步操作中,可以按上下左右四個鍵之一。

按下按鍵之後,長方體向對應的方向沿著稜滾動90度。

任意時刻,長方體不能有任何部位接觸禁地,並且不能立在易碎地面上。

字元」x」標識長方體的起始位置,地圖上可能有乙個」x」或者兩個相鄰的」x」。

地圖上唯一的乙個字元」o」標識目標位置。

求把長方體移動到目標位置(即立在」o」上)所需要的最少步數。

在移動過程中,」x」和」o」標識的位置都可以看作是硬地被利用。

輸入格式

輸入包含多組測試用例。

對於每個測試用例,第一行包括兩個整數n和m。

接下來n行用來描述地圖,每行包括m個字元,每個字元表示一塊地面的具體狀態。

當輸入用例n=0,m=0時,表示輸入終止,且該用例無需考慮。

輸出格式

每個用例輸出乙個整數表示所需的最少步數,如果無解則輸出」impossible」。

每個結果佔一行。

資料範圍3≤

n,m≤

500'>3≤n,m≤500

3≤n,m≤500

輸入樣例:

7 7

#######

#..x###

#..##o#

#....e#

#....e#

#.....#

#######

0 0

輸出樣例:
10
演算法:bfs

#include #include 

#include

using

namespace

std;

const

int maxn = 5e2+7

;struct

rec ;

intn, m;

char

map[maxn][maxn];

int step[maxn][maxn][3]; //

儲存步數

int dir[4][2] = ; //

普通方向陣列

//設0是立著,1是橫著,2是豎著,這三種狀態

int next_x[3][4] = , , };

int next_y[3][4] = , , };

int next_lie[3][4] = , , };

struct rec st, ed; //

分別是起點和終點位置

bool valid(int x, int y)

return

true;}

void parse_st_ed()

if(map[i][j] == 'x'

) }

if(map[i][j] == 'x'

) }}}

}bool

check(rec next)

if(map[next.x][next.y] == '#'

)

//判斷當前位置是否可行

if(next.lie == 0 && map[next.x][next.y] != '.'

)

if(next.lie == 1 && map[next.x][next.y + 1] == '#'

)

if(next.lie == 2 && map[next.x + 1][next.y] == '#'

)

return

true;}

intbfs() }}

queue

q; step[st.x][st.y][st.lie] = 0

; q.push(st);

while(!q.empty()) }}

}return -1; //無解}

intmain()

for(int i = 1; i <= n; i++)

}parse_st_ed();

int ans =bfs();

if(ans != -1

) else

}return0;

}

AcWing寒假每日一題 Day17滑雪場設計

農夫約翰的農場上有 n nn 個山丘,每座山的高度都是整數。在冬天,約翰經常在這些山上舉辦滑雪訓練營。不幸的是,從明年開始,國家將實行乙個關於滑雪場的新稅法。如果滑雪場的最高峰與最低峰的高度差大於17,國家就要收稅。為了避免納稅,約翰決定對這些山峰的高度進行修整。已知,增加或減少一座山峰 x xx ...

AcWing 日期問題

小明正在整理一批歷史文獻。這些歷史文獻 現了很多日期。小明知道這些日期都在1960年1月1日至2059年12月31日。令小明頭疼的是,這些日期採用的格式非常不統一,有採用年 月 日的,有採用月 日 年的,還有採用日 月 年的。更加麻煩的是,年份也都省略了前兩位,使得文獻上的乙個日期,存在很多可能的日...

AcWing 小貓爬山

翰翰和達達飼養了n只小貓,這天,小貓們要去爬山。經歷了千辛萬苦,小貓們終於爬上了山頂,但是疲倦的它們再也不想徒步走下山了 嗚咕 翰翰和達達只好花錢讓它們坐索道下山。索道上的纜車最大承重量為w,而n只小貓的重量分別是c1 c2 cn。當然,每輛纜車上的小貓的重量之和不能超過w。每租用一輛纜車,翰翰和達...