呵呵,有一天我做了乙個夢,夢見了一種很奇怪的電梯。大樓的每一層樓都可以停電梯,而且第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 的棋盤上,並且使皇后彼此之間不能相互攻擊。皇后的攻擊範圍為 自己所在的一行 自己所在的一列 以及自己所在的兩個對角線上。上圖為 8 皇后問題的一種解法。給定乙個整數 n,返回所有不同的 n 皇后問題的解決方案。每一種解法包含乙個明確的 n 皇后問... 給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。示例 board a b c e s f c s a d e e 給定 word abcced 返回 ... 題目描述如下 n 皇后問題研究的是如何將 n 個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。上圖為 8 皇后問題的一種解法。給定乙個整數 n,返回所有不同的 n 皇后問題的解決方案。每一種解法包含乙個明確的 n 皇后問題的棋子放置方案,該方案中 q 和 分別代表了皇后和空位。示例 ...每日刷題 N皇后
每日刷題 單詞搜尋
領扣刷題 N皇后問題