表白记 BFS求最短路径
生活随笔
收集整理的這篇文章主要介紹了
表白记 BFS求最短路径
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
單身的1暗戀上了一個女生,于是想給她告白,于是就在房間里用蛋糕堆了一個心的形狀。
可是天公不作美,在這個房間的某個角落里藏著一只小老鼠,小老鼠虎視眈眈的看著這些蛋糕,想等1走之后去偷吃蛋糕。
一個房間可以看成n*n的方格。小老鼠可以往上、下、左、右四個方向走。問小老鼠吃到蛋糕最少需要多少步?
Input
本題有多組測試,每組測試第一行輸入三個正整數n,x,y。n代表房間的長寬,(x,y)代表老鼠洞的位置
(老鼠出現在老鼠洞這個點也算一步)。接下來n行是房間的布置, ’#’代表蛋糕,’.’代表空地。其中(x,y)一定滿足位于房間的邊上。
(7 ≤n ≤ 99,1 ≤ x,y ≤ n)
Output???
對于每組測試數據輸出一個整數,占一行。
Sample Input
11 1 8
......................
...#...#...
..###.###..
.#########.
.#########.
..#######..
...#####...
....###....
.....#.....
...........
9 7 9
.........
.........
..##.##..
.#######.
.#######.
..#####..
...###...
....#....
.........
Sample Output
3
4
思路:
BFS求最短路模板題:
在一個二維平面內,有路和障礙物,已知起點和終點,求從起點到終點的最短路
#include<bits/stdc++.h> using namespace std; struct node {int x,y,step; }; int n,x,y; int ans; char mp[100][100]; bool vis[100][100]; int to[4][2]={1,0,-1,0,0,1,0,-1}; bool check(int x,int y) {if(x<0||y<0||x>=n||y>=n||vis[x][y])return 1;return 0; } void bfs() {node start,next;start.x=x;start.y=y;start.step=0;vis[x][y]=1;queue<node> q;q.push(start);while(!q.empty()){node temp=q.front();q.pop();vis[temp.x][temp.y]=1;if(mp[temp.x][temp.y]=='#'){ans=temp.step;return;}for(int i=0;i<4;i++){next=temp;next.x+=to[i][0];next.y+=to[i][1];if(check(next.x,next.y))continue;next.step++;vis[next.x][next.y]=1;q.push(next);}}ans=-1; } int main() {while(cin>>n>>x>>y){x--;y--;for(int i=0;i<n;i++)scanf("%s",mp[i]);fill(vis[0],vis[0]+100*100,0);bfs();cout<<ans+1<<endl;}return 0; }總結
以上是生活随笔為你收集整理的表白记 BFS求最短路径的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2018年4月1日 蓝桥杯 C/C++B
- 下一篇: 2018年4月1日 蓝桥杯 C/C++B