洛谷P1135 奇怪的電梯題解 C

2021-10-08 07:37:28 字數 1586 閱讀 8290

原題位址戳這裡

呵呵,有一天我做了乙個夢,夢見了一種很奇怪的電梯。大樓的每一層樓都可以停電梯,而且第i層樓(1 ≤ i ≤ n)上有乙個數字k_i(0 ≤ k_i ≤ n) 。電梯只有四個按鈕:開,關,上,下。上下的層數等於當前樓層上的那個數字。當然,如果不能滿足要求,相應的按鈕就會失靈。例如:3, 3 ,1 ,2 ,5代表k_i(k_1=3,k_2=3,…),從1樓開始。在1樓,按「上」可以到4樓,按「下」是不起作用的,因為沒有-2樓。那麼,從a樓到b樓至少要按幾次按鈕呢?

輸入格式

共二行。

第一行為33個用空格隔開的正整數,表示n,a,b(1≤n≤200,1≤a,b≤n)。

第二行為n個用空格隔開的非負整數,表示k_i 。

輸出格式

一行,即最少按鍵次數,若無法到達,則輸出−1

輸入輸出樣例

輸入 #1

5 1 5

3 3 1 2 5

輸出 #1

3這一題其實是可以用bfs(廣度優先搜尋)來做的,而且也比較簡單。

先解釋一下樣例:

最後輸出的就是3,是不是很簡單:p

大概的**就是說先定義乙個陣列,全部賦值成2147483647,這個陣列用來存最少步數,然後把起始樓層設為0(本來就在這個樓層了還走個啥嘞),然後就是標準的bfs了,先貼一下bfs**:

void

bfs()if

(a1-num[a1]

<=n&&result[a1-num[a1]

]== inf)

s.pop();

//彈出隊頭

}}

不判斷會死迴圈,比如說乙個樣例:

5 1 5

3 3 1 3 5

不加inf就會一直死迴圈,因為一開始在一樓,跑到4樓,因為向下跑不犯規,所以就又回到了1樓,之後,嘿嘿。。。

#include

using

namespace std;

const

int inf =

2147483647

;int n,a,b;

int num[

205]

;int result[

205]

;void

bfs()if

(a1-num[a1]

<=n&&result[a1-num[a1]

]== inf)

s.pop();

}}intmain()

//賦初值

cin>>n>>a>>b;

for(

int i =

1;i<=n;i++

) result[a]=0

;bfs()

;if(result[b]

== inf)

else

}

洛谷p1135 奇怪的電梯

題目描述 呵呵,有一天我做了乙個夢,夢見了一種很奇怪的電梯。大樓的每一層樓都可以停電梯,而且第i層樓 1 i n 上有乙個數字ki 0 ki n 電梯只有四個按鈕 開,關,上,下。上下的層數等於當前樓層上的那個數字。當然,如果不能滿足要求,相應的按鈕就會失靈。例如 3 3 1 2 5代表了ki k1...

洛谷P1135 奇怪的電梯

呵呵,有一天我做了乙個夢,夢見了一種很奇怪的電梯。大樓的每一層樓都可以停電梯,而且第iii層樓 1 i n 上有乙個數字ki 0 ki n 電梯只有四個按鈕 開,關,上,下。上下的層數等於當前樓層上的那個數字。當然,如果不能滿足要求,相應的按鈕就會失靈。例如 3,3,1,2,5代表了ki k1 3,...

洛谷 奇怪的電梯(P1135)

奇怪的電梯 問題分析 根據問題描述,所處在的樓層,上或下的層數由給定數值確定。但是超出範圍則不予響應。舉個例子,如下表所示。樓層號123 456指定數值33 1251 觀察例子發現,每一層到達的樓層是確定的,如果將樓層模擬成頂點,相互間存在到達關係的表示有通路,因此可以將上述問題求解過程,轉變為求頂...