标签:des style blog http color java os io
4 4 2 PLLP PPLP PPPP PLLP
5
QAQ用二维的bfs怒搜8个方向就是过不去,Wjj说是要状态同步只能用三维,sad 还是对三维比较不敏感,没往那方面想。
这道题,以行和列为x,y,以飞行距离D为z 建立三维搜索思想,然后每次在4个方向分别让它行走和飞行。其他的没什么了。
#include <cstdio>//BFS #include <iostream> #include <cstring> #include <algorithm> #include <queue> using namespace std; char ma[110][110]; bool vis[110][110][110]; typedef struct node { int x,y,d,time; }; int n,m,d; int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; void bfs() { queue <node> Q; node t;int i,j; t.x=0;t.y=0;t.time=0;t.d=d; Q.push(t); while(!Q.empty()) { node v=Q.front(); Q.pop(); if(v.x==m-1&&v.y==n-1) { cout<<v.time<<endl; return ; } for(i=0;i<4;i++) { t.x=v.x+dir[i][0]; t.y=v.y+dir[i][1]; t.d=v.d; if(t.x>=0&&t.x<m&&t.y>=0&&t.y<n&&!vis[t.x][t.y][t.d]&&ma[t.x][t.y]=='P')//run { vis[t.x][t.y][t.d]=1; t.time=v.time+1; Q.push(t); } for(j=2;j<=v.d;j++)//fly { t.x=v.x+j*dir[i][0]; t.y=v.y+j*dir[i][1]; if(t.x>=0&&t.x<m&&t.y>=0&&t.y<n&&!vis[t.x][t.y][v.d-j]&&ma[t.x][t.y]=='P') { vis[t.x][t.y][v.d-j]=1; t.d=v.d-j; t.time=v.time+1; Q.push(t); } } } } puts("impossible"); } int main() { int i,j; while(cin>>m>>n>>d) { memset(vis,0,sizeof(vis)); for(i=0;i<m;i++) cin>>ma[i]; bfs(); } return 0; }
SDUT 1124-飞跃原野--三维BFS,布布扣,bubuko.com
标签:des style blog http color java os io
原文地址:http://blog.csdn.net/qq_16255321/article/details/38546479