/*
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.步數 ...