hdu 4528——小明系列故事——捉迷藏
2013-09-29 00:24
417 查看
bfs
#include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; struct Node { int x,y; int t; int flag1,flag2; Node(int xx,int yy,int tt,int ff1,int ff2) { x=xx; y=yy; t=tt; flag1=ff1; flag2=ff2; } }; int n,m,T; int x,y; char mat[110][110]; int vis[110][110][2][2],vis1[110][110],vis2[110][110]; int dir[4][2]={0,1,0,-1,1,0,-1,0}; void print() { for(int i=0;i<n;i++) { for(int j=0;j<m;j++) cout<<vis1[i][j]<<" "; cout<<endl; } cout<<endl; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) cout<<vis2[i][j]<<" "; cout<<endl; } cout<<endl; } void init() { int flag1=1,flag2=1,flag3=1; for(int i=0;i<n&&(flag1||flag2||flag3);i++) for(int j=0;j<m&&(flag1||flag2||flag3);j++) { if(mat[i][j]=='S') { x=i,y=j; flag1=0; } if(mat[i][j]=='D') { flag2=0; vis1[i][j]=1; for(int d=0;d<4;d++) { int tx=i; int ty=j; while(1) { tx+=dir[d][0]; ty+=dir[d][1]; if(tx>=0&&tx<n&&ty>=0&&ty<m&&(mat[tx][ty]=='.'||mat[tx][ty]=='S')) vis1[tx][ty]=1; else break; } } } if(mat[i][j]=='E') { flag3=0; vis2[i][j]=1; for(int d=0;d<4;d++) { int tx=i; int ty=j; while(1) { tx+=dir[d][0]; ty+=dir[d][1]; if(tx>=0&&tx<n&&ty>=0&&ty<m&&(mat[tx][ty]=='.'||mat[tx][ty]=='S')) vis2[tx][ty]=1; else break; } } } } } int bfs() { queue<Node> q; q.push(Node(x,y,0,vis1[x][y],vis2[x][y])); vis[x][y][vis1[x][y]][vis2[x][y]]=1; if(vis1[x][y]&&vis2[x][y]) return 0; while(!q.empty()) { Node t=q.front(); q.pop(); for(int i=0;i<4;i++) { int tx=t.x+dir[i][0]; int ty=t.y+dir[i][1]; if(tx>=0&&tx<n&&ty>=0&&ty<m&&mat[tx][ty]=='.'&&!vis[tx][ty][t.flag1][t.flag2]) { vis[tx][ty][t.flag1][t.flag2]=1; q.push(Node(tx,ty,t.t+1,t.flag1|vis1[tx][ty],t.flag2|vis2[tx][ty])); if(t.t+1>T) return -1; if((t.flag1|vis1[tx][ty])&&(t.flag2|vis2[tx][ty])) return t.t+1; } } } return -1; } int main() { int t; int cas=1; cin>>t; while(t--) { cin>>n>>m>>T; for(int i=0;i<n;i++) scanf("%s",mat[i]); memset(vis,0,sizeof(vis)); memset(vis1,0,sizeof(vis1)); memset(vis2,0,sizeof(vis2)); init(); //print(); printf("Case %d:\n",cas++); cout<<bfs()<<endl; } return 0; }
相关文章推荐
- hdu 4528 小明系列故事——捉迷藏【Bfs】
- HDU - 4528 小明系列故事——捉迷藏 (广搜)
- hdu 4528小明系列故事——捉迷藏
- hdu 4528 小明系列故事——捉迷藏 bfs 解题报告
- HDU 4528 小明系列故事――捉迷藏
- HDU 4528 BFS 小明系列故事——捉迷藏
- 小明系列故事——捉迷藏 HDU - 4528 BFS详解
- HDU 4528 小明系列故事――捉迷藏
- [HDU] 4528 小明系列故事——捉迷藏 -又一个需要靠多维变量来记录一个状态访问没有被访问的广搜题
- hdu 4528小明系列故事——捉迷藏 (bfs)
- hdu 4528 小明系列故事——捉迷藏
- HDU 4528 小明系列故事——捉迷藏
- HDU 4528 小明系列故事――捉迷藏 (很好的BFS)
- HDU-4528 小明系列故事——捉迷藏 BFS模拟
- BFS hdu-4528 小明系列故事——捉迷藏
- hdu 4501 (小明系列故事——买年货) (多维背包)
- hdu 4542 小明系列故事——未知剩余系 数论
- HDU 小明系列故事——师兄帮帮忙 高速幂
- [2013腾讯马拉松 3月23日]HDU 4517 小小明系列故事——游戏的烦恼
- HDU 4501 小明系列故事——买年货