BFS Sicily 1215 脫離地牢

2021-08-14 14:47:48 字數 2301 閱讀 6300

constraints

time limit: 1 secs, memory limit: 32 mb

在乙個神秘的國度裡,年輕的王子paris與美麗的公主helen在一起過著幸福的生活。他們都隨身帶有一塊帶磁性的陰陽魔法石,身居地獄的魔王satan早就想得到這兩塊石頭了,只要把它們熔化,satan就能吸收其精華大增自己的魔力。於是有一天他趁二人不留意,把他們帶到了自己的地牢,分別困在了不同的地方。然後satan念起了咒語,準備煉獄,界時二人都將葬身於這地牢裡。

危險!paris與helen都知道了satan的意圖,他們要怎樣才能打敗魔王,脫離地牢呢?paris想起了父王臨終前留給他的備忘本,原來他早已料到了satan的野心,他告訴paris只要把兩塊魔法石合在一起,唸出咒語,它們便會放出無限的光亮,殺死魔王,脫離地牢,而且本子上還附下了地牢的地圖,paris從中了解到了helen的位置所在。於是他決定首先要找到helen,但是他發現這個地牢很奇怪,它會增強二人魔法石所帶磁力的大小,而且會改變磁力的方向。這就是說,每當pairs向南走一步,helen有可能會被石頭吸引向北走一步。而這個地獄布滿了岩石與熔漿,pairs必須十分小心,不僅他不能走到岩石或熔漿上,而且由於他行走一步,helen的位置也會改變,如果helen碰到岩石上,那麼她將停留在原地,但如果helen移動到了熔漿上,那麼她將死去,paris就找不到她了。

pairs仔細分析了地圖,他找出了一條最快的行走方案,最終與helen相聚。他們一起唸出了咒語"@^&#……%@%&$",轟隆一聲,地牢塌陷了,他們又重見光明……

輸入資料第一行為兩個整數n,m(3<=n,m<=20),表示地牢的大小,n行m列。接下來n行,每行m個字元,描述了地牢的地圖,".「代表通路,」#「代表岩石,」!「代表熔漿。輸入保證地牢是封閉的,即四周均是均是岩石或熔漿。接下來一行有四個字元"n」(北),「s」(南),「w」(西),「e」(東)的排列,表示paris分別向nswe四個方向走時helen受磁石磁力影響的移動方向。

輸出檔案只有一行,如果paris能找到helen,輸出一整數d,為paris最少需要行走的步數;如果paris在255步之後仍找不到helen,則輸出"impossible"。注意相遇是指paris與helen最終到達同乙個格仔,或者二人在相鄰兩格移動後碰在了一起,而後者的步數算他們移動後的步數。

5

5#####

#h..##.!

.##.#p#

#####

wnse

解釋:paris行走方案為nnwws,每步過後helen位置在(2,2), (2,2), (3,2), (4,2), (3,2)。

就老老實實地用廣度優先搜尋就好了

///  ac ** 

#include

#include

using namespace std;

#include

const

int maxn =22;

char map[maxn]

[maxn]

;int meg[4]

;// n s w e

struct node };

// n s w e

int opx[4]

=;int opy[4]

=; bool visited[maxn]

[maxn]

[maxn]

[maxn]

;int n, m;

node bfs

(node now)if(

!visited[px]

[py]

[hx]

[hy]

)else

if(px == hx && py == hy)

q.push

(node

(px,py,hx,hy,front.steps +1)

);}}

}}}return

node(0

,0,0

,0,256);

}int

main()

else

if(map[i]

[j]==

'h')}}

string s;

cin >> s;

for(

int i =

0; i <4;

++i)

now =

bfs(now);if

(now.steps >

255) cout <<

"impossible"

<< endl;

else cout << now.steps << endl;

}}

1215 脫離地牢

此題有個巨大的吐槽的地方就是最終狀態的判定有兩種情況,相遇或者到乙個格仔裡,不要忘記當隊列為空要判定狀態為結束。還有可以用方向來代表陣列的下標,是 更具有可讀性。include include include using namespace std intconst maxn 50 char map...

sicily 1215 脫離地牢

做sicily 1215脫離地牢 這一題,一直restrict function,都快崩潰了。最後發現是記憶體洩露,就是new出來的東西沒有及時delete導致的。具體是在廣度優先搜尋的時候,每找一次鄰居就new出一些節點,有些節點已被visited了然後我直接忽略它們,實際上是得把它們delete...

sicily 1215 脫離地牢

time limit 1 secs,memory limit 32 mb 在乙個神秘的國度裡,年輕的王子paris與美麗的公主helen在一起過著幸福的生活。他們都隨身帶有一塊帶磁性的陰陽魔法石,身居地獄的魔王satan早就想得到這兩塊石頭了,只要把它們熔化,satan就能吸收其精華大增自己的魔力。...