BFS模板 A計畫

2021-07-23 21:11:37 字數 1838 閱讀 6200

/*

time limit:1000ms     memory limit:32768kb     64bit io format:%i64d & %i64u

submit status practice hdu 2102

description

可憐的公主在一次次被魔王擄走一次次被騎士們救回來之後,而今,

不幸的她再一次面臨生命的考驗。魔王已經發出訊息說將在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 # include # include using namespace std;

struct node

;int n, m, lim;

int to[4][2] = , , , };

char matrix[2][15][15];

int visit[2][15][15]; //標記陣列

int s[3];

int e[3];

bool check(int floor, int x, int y)

void bfs()

if (a.step >= lim) //超過要求步數

for (i=0; i<4; i++) //4個方向

visit[next.floor][next.x][next.y] = 1;

if (matrix[next.floor][next.x][next.y] == '#') //遇到傳送門

if (matrix[next.floor][next.x][next.y] == '*' || matrix[next.floor][next.x][next.y] == '#') //撞牆或者是對應位置也是傳送門

visit[next.floor][next.x][next.y] = 1;

}if (next.floor == e[0] && next.x == e[1] && next.y == e[2])

q.push(next);}}

printf("no\n");

}int main()

if (matrix[k][i][j] == 'p')}}

}bfs();

}return 0;

}

BFS例題 A計畫

c ontr ibcontrib a11y accessibility menu.js 關於 bfs要點 1 若為可化為的座標系圖形,可用結構體儲存其x值,y值和步數。一般開now 和 next now用於取出佇列裡面的結構體 next用於上下左右的運動計算,並且push到佇列中。2 在運用佇列時,...

雙向BFS模板

如果已經知道搜尋的開始狀態和結束狀態,要找乙個滿足某種條件的一條路徑 一般是最短路徑 為了避免無謂的 組合 產生,就可以採取雙向廣度搜尋演算法,也就是從開始狀態和結束狀態同時開始搜尋,乙個向前搜,乙個向後找。這樣做的好處是什麼?我們不妨假設每次搜尋的分支因子是r,如果最短的路徑長為l的話 也就是搜了...

BFS基本模板

改改之後就是農夫追牛的ac 題目位址 include using namespace std define n 10000000 迷宮的規模 type start,aim type為某種資料型別 start初始位置,aim目標位置 struct node 記錄兩種狀態 1.記錄該步的狀態 2.步數 ...