Rescue (bfs)

来源:互联网 发布:家庭智能音乐系统 知乎 编辑:程序博客网 时间:2024/05/16 04:52

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1649



第一次做bfs,感觉还是和dfs有点不一样的,基本都是找书上敲的。。。


#include <cstdio>#include <cstring>#include <cstdlib>#include <string>#include <map>#include <cmath>#include <queue>#include <stack>#include <iostream>#include <stdexcept>#include <cstddef>#include <algorithm>#include <vector>#include <numeric>#include <cctype>#define LL long long#define Endl endl#define INF 0x7fffffff//#define WJusing namespace std;const int maxn=205;char Map[maxn][maxn];int mintime[maxn][maxn],ex,ey,n,m;int dir[4][2]={1,0,-1,0,0,1,0,-1};struct point{int x,y;int time;int step;};queue<point> q;int bfs(point s){q.push(s);point hd;while(!q.empty()){hd=q.front(); q.pop();for(int i=0;i<4;i++){int x=hd.x+dir[i][0],y=hd.y+dir[i][1];if(x>=0&&x<n&&y>=0&&y<m&&Map[x][y]!='#'){point t;t.x=x; t.y=y;t.time=hd.time+1; t.step=hd.step+1;if(Map[x][y]=='x') t.time++;if(t.time<mintime[x][y]){mintime[x][y]=t.time;q.push(t);}}}}return mintime[ex][ey];}int main(int argc, char *argv[]){#ifdef WJ//freopen("in.txt","r",stdin);freopen("out.txt","w",stdout);#endifwhile(~scanf("%d%d",&n,&m)){for(int i=0;i<n;i++)scanf("%s",Map[i]);int bx,by;for(int i=0;i<n;i++){for(int j=0;j<m;j++){mintime[i][j]=INF;if(Map[i][j]=='a'){ex=i; ey=j;}else if(Map[i][j]=='r'){bx=i; by=j;}}}point start;start.x=bx; start.y=by;start.time=0; start.step=0;mintime[bx][by]=0;int mint=bfs(start);if(mint<INF) printf("%d\n",mint);else printf("Poor ANGEL has to stay in the prison all his life.\n");}return 0;}


0 0
原创粉丝点击