c
ontr
ibcontrib
/a11y/accessibility-menu.js
關於 bfs要點:
1、若為可化為的座標系圖形,可用結構體儲存其x值,y值和步數。(一般開now 和 next ,now用於取出佇列裡面的結構體)next用於上下左右的運動計算,並且push到佇列中。
2、在運用佇列時,常用的函式(push,front,size,empty,pop 等等),特別是在front佇列裡面的結構體時記住pop,佇列裡面的內容是先存放先使用,有序取出。
3、在壓入點到佇列中時要進行判斷是否合理,可寫乙個函式check進行判斷,判斷依據是否出界,以及是否合題意要求。
4、題目a計畫中的」傳送門「並不會影響step,在判斷過於複雜時可以寫函式以免混淆思維。在關鍵點可以用陣列進行記錄,開陣列時可以根據題意開大10%的陣列(題意:a<=100 可開a[110])。
5、在移動壓縮時,可根據題意開乙個二維陣列進行前後左右的移動,移動時一般使用next結構體。
bfs例題:
a計畫可憐的公主在一次次被魔王擄走一次次被騎士們救回來之後,而今,不幸的她再一次面臨生命的考驗。魔王已經發出訊息說將在t時刻吃掉公主,因為他聽信謠言說吃公主的肉也能長生不老。年邁的國王正是心急如焚,告招天下勇士來拯救公主。不過公主早已習以為常,她深信智勇的騎士lj肯定能將她救出。
現據密探所報,公主被關在乙個兩層的迷宮裡,迷宮的入口是s(0,0,0),公主的位置用p表示,時空傳輸機用#表示,牆用*表示,平地用.表示。騎士們一進入時空傳輸機就會被轉到另一層的相對位置,但如果被轉到的位置是牆的話,那騎士們就會被撞死。騎士們在一層中只能前後左右移動,每移動一格花1時刻。層間的移動只能通過時空傳輸機,且不需要任何時間。
input
輸入的第一行c表示共有c個測試資料,每個測試資料的前一行有三個整數n,m,t。 n,m迷宮的大小n*m(1 <= n,m <=10)。t如上所意。接下去的前n*m表示迷宮的第一層的布置情況,後n*m表示迷宮第二層的布置情況。
output
如果騎士們能夠在t時刻能找到公主就輸出「yes」,否則輸出「no」。
sample input
15 5 14
s*#*.
.#...
.....
****.
...#.
..*.p
#.*..
***..
...*.
*.#..
sample output
yes
#include #include #include using namespace std;
struct node
;int t,n,m,lim;
int s[3],e[3];
int to[4][2] = ;
char map[2][15][15];
int use[2][15][15];
int check(int floor,int x,int y)
void bfs()
if(a.step>=lim)
break;
for(i = 0; i<4; i++)
if(next.floor == e[0] && next.x == e[1] && next.y == e[2])
q.push(next);}}
printf("no\n");
}int main()
{ int i,j,k;
scanf("%d",&t);
while(t--)
{scanf("%d%d%d",&n,&m,&lim);
for(int k=0;k<2;k++)
{for(i=0;i
BFS基礎例題
都是kuangbin的題 例1 poj2251 dungeon master 三維迷宮問題 題目大意 在三維空間中給出起點和終點,找最短的逃出去的路徑長 做法 bfs基礎上增加一維,本質是一樣的 const int maxn 2e6 7 const int inf 1e9 const ll inff...
BFS和佇列例題
poj2251dungeon master 最簡單的bfs求最短距離,只是改一下方向陣列就可以,二維陣列改為三維陣列 下面是ac 對了,下面用的c 佇列,其實很簡單,就只有幾種操作 先介紹佇列的定義 queue 型別名 變數名,如 queueq,queue或queueque struct node ...
例題 收入計畫
高考結束後,同學們大都找到了乙份臨時工作,渴望掙得藝些零用錢。從今天起,matrix67將連續工作n天 1 n 100000 每一天末他可以領取當天及前面若干天裡沒有領取的工資,但他總共只有m 1 m n 次領取 資的機會,matrix67已經知道了在 接下來的這n天裡每一天他可以賺多少錢。為了避免...