N諾刷題(搜尋)

2021-10-06 17:20:19 字數 2025 閱讀 1852

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

輸入檔案共有二行,第一行為三個用空格隔開的正整數,表示n,a,b(1≤n≤200, 1≤a,b≤n),第二行為n個用空格隔開的正整數,表示ki。

輸出按鈕次數。

使用bfs進行搜尋,每次在岔路口選擇+ki或者-ki,如果在第x步得到了b,那麼直接返回x。

設定乙個結構體存放佇列元素(樓層和按鈕次數)

#include

using

namespace std;

const

int maxn =

210;

int n,a,b;

int k[maxn]

;int vis[maxn]

;//標記樓層已經來過

struct ff};

intmain()

queue q;

q.push(ff

(a,0))

;//初始在a層

vis[a]=1

;while

(!q.

empty()

)int temp = q.

front()

.floor +k[q.

front()

.floor]

;//上樓

if(temp <=n&&vis[temp]==0

) temp = q.

front()

.floor - k[q.

front()

.floor]

;//下樓

if(temp>

0&& vis[temp]==0

) q.

pop();

//彈出隊首元素

}printf

("-1");

return0;

}

在乙個封閉的房間裡,gogo給大家表演了他的屁遁術,人果然一下沒影了,但是他留下的「生化**」,卻以每秒1公尺的速度向上下左右擴散出去。為了知道自己會不會被「毒」到,你果斷寫了個演算法計算出了「毒氣」在t秒時間內可以到達的所有地方。

輸入輸出格式

輸入描述:

有多組測試資料

第一行輸入n,m,t(0樣例輸入:

9 9 4

*********

x…x…x

x.*…x

x…x…x

*********

x…xx…x

x…******

當遇到每行輸入的字元個數不一定時,不能使用雙層迴圈輸入二維陣列g,而是使用單層迴圈,直接用cin>>g[i],來輸入一整行。

依舊使用bfs進行搜尋,每次向上下左右移動一步,同時保持時間#include

using

namespace std;

const

int maxn =35;

int n,m,t;

int dis[4]

[2]=

,,,}

;struct node};

intmain()

int blockcnt =0;

int fillcnt =0;

queue q;

for(

int i =

0;i)else

if(g[i]

[j]==

'.')}}

while

(!q.

empty()

&& t>0)

}}if(blockcnt == fillcnt) cout<<

"no"

return0;

}

每日刷題 N皇后

n 皇后問題研究的是如何將 n 個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。皇后的攻擊範圍為 自己所在的一行 自己所在的一列 以及自己所在的兩個對角線上。上圖為 8 皇后問題的一種解法。給定乙個整數 n,返回所有不同的 n 皇后問題的解決方案。每一種解法包含乙個明確的 n 皇后問...

每日刷題 單詞搜尋

給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。示例 board a b c e s f c s a d e e 給定 word abcced 返回 ...

領扣刷題 N皇后問題

題目描述如下 n 皇后問題研究的是如何將 n 個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。上圖為 8 皇后問題的一種解法。給定乙個整數 n,返回所有不同的 n 皇后問題的解決方案。每一種解法包含乙個明確的 n 皇后問題的棋子放置方案,該方案中 q 和 分別代表了皇后和空位。示例 ...