HDU 4528 小明系列故事――捉迷藏 (很好的BFS)
来源:互联网 发布:apt模型 知乎 编辑:程序博客网 时间:2024/05/22 15:54
在用BFS的时候可访问的点要用四个状态去记录,0代表一个都没找到,1代表找到了大明,2代表找到了二明,3代表都找到。
因为在BFS的过程中访问各节点时,因为访问时的状态不同,所以过程中包含有回路。
我的代码:
#include<cstdio>#include<cstring>#include<queue>#include<iostream>using namespace std;const int maxn = 105;struct Nod{ int x,y,s,t;};bool vis[maxn][maxn][4];char ms[maxn][maxn];int n,m,t;queue<Nod> q;int dx[4] = {1,-1,0,0};int dy[4] = {0,0,1,-1};int find(int x,int y){ int res = 0,nx,ny; for(int i=0;i<4;i++){ nx = x + dx[i];ny = y + dy[i]; while(nx <= n && nx >= 1 && ny <= m && ny >= 1 && ms[nx][ny]=='.'){ nx=nx+dx[i];ny=ny+dy[i]; } if(nx <= n && nx >= 1 && ny <= m && ny >= 1){ if(ms[nx][ny]=='D') res+=1; else if(ms[nx][ny]=='E') res+=2; } } return res;}int solve(){ //cout<<find(4,5)<<endl; memset(vis,0,sizeof(vis)); while(!q.empty()) q.pop(); Nod o,ins; for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(ms[i][j]=='S'){ o.x = i;o.y = j;o.s = find(i,j);o.t = 0; } q.push(o); vis[o.x][o.y][o.s] = true; while(!q.empty()){ o = q.front();q.pop(); if(o.s==3) return o.t; //printf("%d %d %d %d\n",o.x,o.y,o.s,o.t); int nx,ny,ns; for(int i=0;i<4;i++){ nx = o.x + dx[i];ny = o.y + dy[i]; ns = o.s != find(nx,ny) ? o.s + find(nx,ny) : o.s; if(ns > 3) ns = 3; if(nx < 1 || nx > n || ny < 1 || ny > m || ms[nx][ny] != '.' || vis[nx][ny][ns]) continue; ins.x = nx;ins.y = ny;ins.s = ns;ins.t = o.t + 1; if(ins.t > t) continue; vis[nx][ny][ns] = true; q.push(ins); } } return -1;}int main(){ int cas; scanf("%d",&cas); for(int T = 1 ; T <= cas; T++){ scanf("%d%d%d",&n,&m,&t); for(int i=1;i<=n;i++) scanf("%s",ms[i]+1); printf("Case %d:\n%d\n",T,solve()); } return 0;}
0 0
- HDU 4528 小明系列故事――捉迷藏 (很好的BFS)
- BFS hdu-4528 小明系列故事——捉迷藏
- 【BFS】 HDU 4528 小明系列故事——捉迷藏
- hdu 4528 小明系列故事——捉迷藏【Bfs】
- HDU 4528 小明系列故事――捉迷藏
- hdu 4528小明系列故事——捉迷藏 (bfs)
- hdu 4528 小明系列故事——捉迷藏 bfs 解题报告
- hdu 4528小明系列故事——捉迷藏
- HDU 4528 小明系列故事——捉迷藏
- hdu 4528 小明系列故事——捉迷藏
- hdu4528小明系列故事——捉迷藏(bfs)
- hdu 4528——小明系列故事——捉迷藏
- 小明系列故事——捉迷藏
- 小明系列故事——捉迷藏
- hdu4528 小明系列故事——捉迷藏 解题报告
- hdu4528 小明系列故事——捉迷藏
- hdu 4501 小明系列故事――买年货
- HDU - 4511 小明系列故事――女友的考验(AC自动机+DP)
- 代码如人
- IOS TableView 根据子view 来获取当前Cell 方式
- MongoDB MapReduce(转)
- NSIS (NullSoft Scriptable Install System)使用指北(超详细)
- js dojo 保存txt文件
- HDU 4528 小明系列故事――捉迷藏 (很好的BFS)
- 使用脚本进行ssh登录服务器(Linux新手之路)
- 增值构造法子集生成
- Spinner下拉框使用方式总结(样式设计)
- hdu 1166 敌兵布阵 线段树单点更新
- 《如果我不曾见过太阳》
- Java 代码调用 Android studio mipmap图片资源
- 自定义对象的调用
- 解决多个jquery并存冲突问题