HDU 3085 双广
来源:互联网 发布:怎么修改网络手游数据 编辑:程序博客网 时间:2024/04/28 08:37
n*m地图上有
‘. ’:路
‘X':墙
’Z':鬼,每秒蔓延2个单位长度,可以穿墙,共两个,每秒开始时鬼先动
‘M’:一号,每分钟可移动3个单位长度
‘G’:二号,每分钟课移动1个单位长度
问两人是否可以成功碰面,再不被鬼吃掉的前提下
双向广搜,对于‘M’,每次搜三步,对于‘G’,每次搜一步。和鬼的距离可用曼哈顿距离计算判断
注意每秒开始时鬼先移动
#include "stdio.h"#include "string.h"#include "algorithm"#include "queue"using namespace std;const int dir[4][2]={ {1,0},{-1,0},{0,1},{0,-1} };char str[810][810];int used[2][810][810];int g_x,g_y,m_x,m_y,n,m,step;struct node{ int x,y;}ncur,z[2];queue<node>q[2];void init(){ int i,j,cnt; scanf("%d%d",&n,&m); for (i=0;i<n;i++) scanf("%s",str[i]); cnt=0; for (i=0;i<n;i++) for (j=0;j<m;j++) { if (str[i][j]=='G') { g_x=i; g_y=j; } if (str[i][j]=='M') { m_x=i; m_y=j; } if (str[i][j]=='Z') { z[cnt].x=i; z[cnt++].y=j; } }}int judge(node b){ if (b.x<0 || b.y<0 || b.x>=n || b.y>=m) return 0; if (str[b.x][b.y]=='X') return 0; if ((abs(b.x-z[0].x)+abs(b.y-z[0].y))<=2*step) return 0; if ((abs(b.x-z[1].x)+abs(b.y-z[1].y))<=2*step) return 0; return 1;}int bfs(int w){ node cur,next; int i,sum; sum=q[w].size(); while (sum--) { cur=q[w].front(); q[w].pop(); if (judge(cur)==0) continue; for (i=0;i<4;i++) { next.x=cur.x+dir[i][0]; next.y=cur.y+dir[i][1]; if (judge(next)==0) continue; if (used[w][next.x][next.y]==0) { if (used[w^1][next.x][next.y]==1) return 1; used[w][next.x][next.y]=1; q[w].push(next); } } } return 0;}int solve(){ while (!q[0].empty()) q[0].pop(); while (!q[1].empty()) q[1].pop(); ncur.x=m_x; ncur.y=m_y; q[0].push(ncur); ncur.x=g_x; ncur.y=g_y; q[1].push(ncur); memset(used,0,sizeof(used)); used[0][m_x][m_y]=used[1][g_x][g_y]=1; step=0; while ((!q[0].empty()) || (!q[1].empty())) { step++; if (bfs(0)==1) return step; if (bfs(0)==1) return step; if (bfs(0)==1) return step; if (bfs(1)==1) return step; } return -1;}int main(){ int Case; scanf("%d",&Case); while (Case--) { init(); printf("%d\n",solve()); } return 0;}
0 0
- HDU 3085 双广
- hdu 1401双广
- HDU 1195 双广
- hdu 1401 (双广)
- hdu 1026 广搜
- hdu 1548 (广搜)
- HDU 1252 广搜
- HDU 1548 广搜
- HDU 3533 广搜
- Nightmare-HDU-广搜
- POJ-1077 HDU-1043 Eight(单广,双广,启发式搜索)
- HDU 3085 Nightmare Ⅱ (双向广搜)
- HDU 3085 Nightmare Ⅱ (双向广搜)
- HDU 2209 翻纸牌游戏(双广||状态压缩)
- HDU 1403 Eight&POJ 1077(康拖,A* ,BFS,双广)
- hdu 1072 Nightmare(广搜)
- HDU 1072 Nightmare(广搜)
- hdu 1067 广搜+map
- Linux笔记(5)程序编辑器 :vi
- 《跨界杂谈》企业商业模式(一):成本
- Debian(wheezy) 配置PostgreSQL9
- Android属性动画简析
- HDU Disney's FastPass
- HDU 3085 双广
- 改变项目符号样式或用图片定义项目符号
- 春节红包大战的最大输家是银行
- WebView注入Java对象注意事项
- Android中dip、dp、sp、pt和px的区别详解
- sudo命令
- Windows下安装python2.7及数据挖掘模块套装
- LVS(DR)+Keepalived 安装 成功安例
- http下载文件