P1135 奇怪的電梯(BFS DFS)

2021-09-13 12:15:18 字數 1417 閱讀 3753

題目描述

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

輸入共二行。

第一行為3個用空格隔開的正整數,表示n,a,b(1≤n≤200, 1≤a,b≤n) ,第二行為n個用空格隔開的非負整數,表示k i。

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

樣例輸入

5 1 5

3 3 1 2 5

樣例輸出

3解法一:bfs

ac_code:

#include

using namespace std;

int n,a,b;

int g[

205]

;bool vis[

205]

;int f[

205]

,flag;

intbfs()

//vis[k] = true;

//vis單獨放在這標記是不對的,ac90%,應該是入隊就標記

q.pop();

int x = k + g[k]

, y = k - g[k];if

(x<=n &&

!vis[x])if

(y>=1&&

!vis[y])}

return-1

;}intmain()

int ans =

bfs();

cout

}

解法二:

dfs:

#include

#define inf 0x3f3f3f3f

using namespace std;

vector<

int>v[

205]

;bool vis[

205]

;int n,a,b,ans = inf ;

void

dfs(

int s,

int cnt)

for(

int i =

0; i < v[s]

.size()

; i++)}

}int

main()

dfs(a,0)

;if(ans == inf)

cout<<-1

cout

}

P1135 奇怪的電梯

題目描述 呵呵,有一天我做了乙個夢,夢見了一種很奇怪的電梯。大樓的每一層樓都可以停電梯,而且第ii層樓 1 le i le n 1 i n 上有乙個數字k i 0 le k i le n k i 0 k i n 電梯只有四個按鈕 開,關,上,下。上下的層數等於當前樓層上的那個數字。當然,如果不能滿足...

P1135 奇怪的電梯

p1135 奇怪的電梯 呵呵,有一天我做了乙個夢,夢見了一種很奇怪的電梯。大樓的每一層樓都可以停電梯,而且第iii層樓 1 i n 1 le i le n 1 i n 上有乙個數字ki 0 ki n k i 0 le k i le n ki 0 ki n 電梯只有四個按鈕 開,關,上,下。上下的層數...

P1135 奇怪的電梯

我宣告這個題就是個哈皮題,搞幾個根本沒有現實意義的資料卡你,到底是 1還是0 不想說太多 採用最最基礎的bfs,沒啥技術含量。看洛谷的題解還有人玩spaf dfs dij等等,總之玩法很多,我只會bfs include using namespace std int main int dy 8 me...