HDU3345广搜 (P,E,T,#)
In this game, there is an N * M battle map, and every player has his own Moving Val (MV). In each round, every player can move in four directions as long as he has enough MV. To simplify the problem, you are given your position and asked to output which grids you can arrive.

In the map:
'Y' is your current position (there is one and only one Y in the given map).
'.' is a normal grid. It costs you 1 MV to enter in this gird.
'T' is a tree. It costs you 2 MV to enter in this gird.
'R' is a river. It costs you 3 MV to enter in this gird.
'#' is an obstacle. You can never enter in this gird.
'E's are your enemies. You cannot move across your enemy, because once you enter the grids which are adjacent with 'E', you will lose all your MV. Here “adjacent” means two grids share a common edge.
'P's are your partners. You can move across your partner, but you cannot stay in the same grid with him final, because there can only be one person in one grid.You can assume the Ps must stand on '.' . so ,it also costs you 1 MV to enter this grid.
Then T cases follow:
Each test case starts with a line contains three numbers N,M and MV (2<= N , M <=100,0<=MV<= 65536) which indicate the size of the map and Y's MV.Then a N*M two-dimensional array follows, which describe the whole map.
#include<cstdio>
#include<cstring>
#include<queue>
#include<iostream>
#include<algorithm>
using namespace std;
char map1[105][105],ans[105][105];
int m,n,mv;
int startx,starty;
int count1[105][105];
int NEXT[4][2]={1,0,0,-1,-1,0,0,1};
struct node
{
int x;
int y;
int s;
}q1,q2;
queue<node>qu;
int calulate(int x1,int y1,int v)
{
int tx,ty,ret;
if( map1[x1][y1]=='T')
ret=v-2;
else if( map1[x1][y1]=='R')
ret=v-3;
else
ret=v-1;
for(int i=0;i<=3;i++)
{
tx=x1+NEXT[i][0];
ty=y1+NEXT[i][1];
if(tx<1||tx>m||ty<1||ty>n)
continue;
if( map1[tx][ty]=='E')
{
if(ret>0)
return 0;
else
return ret;
}
}
return ret;
}
void bfs()
{
q1.x=startx;
q1.y=starty;
q1.s=mv;
qu.push(q1);
count1[startx][starty]=mv;
while(!qu.empty())
{
q1=qu.front();
qu.pop();
if(q1.s==0)
continue;
for(int k=0;k<=3;k++)
{
q2.x=q1.x+NEXT[k][0];
q2.y=q1.y+NEXT[k][1];
if(q2.x<1||q2.x>m||q2.y<1||q2.y>n)
continue;
if( map1[q2.x][q2.y]=='#'|| map1[q2.x][q2.y]=='Y'|| map1[q2.x][q2.y]=='E')
continue;
q2.s=calulate(q2.x,q2.y,q1.s);
if(q2.s<0)
continue;
if(q2.s>count1[q2.x][q2.y])
{
count1[q2.x][q2.y]=q2.s;
qu.push(q2);
if( map1[q2.x][q2.y]!='P')
ans[q2.x][q2.y]='*';
}
}
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(count1,-1,sizeof(count1));
memset( map1,0,sizeof( map1));
memset(ans,0,sizeof(ans));
scanf("%d%d%d",&m,&n,&mv);
getchar();
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
scanf("%c",&map1[i][j]);
ans[i][j]= map1[i][j];
if( map1[i][j]=='Y')
{
startx=i;
starty=j;
}
}
getchar();
}
bfs();
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
printf("%c",ans[i][j]);
printf("\n");
}
printf("\n");
}
return 0;
}
HDU3345广搜 (P,E,T,#)的更多相关文章
- HDU--杭电--1195--Open the Lock--深搜--都用双向广搜,弱爆了,看题了没?语文没过关吧?暴力深搜难道我会害羞?
这个题我看了,都是推荐的神马双向广搜,难道这个深搜你们都木有发现?还是特意留个机会给我装逼? Open the Lock Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 5652(二分+广搜)
题目链接:http://acm.hust.edu.cn/vjudge/contest/128683#problem/E 题目大意:给定一只含有0和1的地图,0代表可以走的格子,1代表不能走的格 子.之 ...
- nyoj 613 免费馅饼 广搜
免费馅饼 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy ...
- poj 3984:迷宫问题(广搜,入门题)
迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7635 Accepted: 4474 Description ...
- poj 3278:Catch That Cow(简单一维广搜)
Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 45648 Accepted: 14310 ...
- 双向广搜 POJ 3126 Prime Path
POJ 3126 Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16204 Accepted ...
- 广搜+打表 POJ 1426 Find The Multiple
POJ 1426 Find The Multiple Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 25734 Ac ...
- 双向广搜 codevs 3060 抓住那头奶牛
codevs 3060 抓住那头奶牛 USACO 时间限制: 1 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题目描述 Description 农夫约翰被告知一头逃跑奶牛 ...
- 双向广搜+hash+康托展开 codevs 1225 八数码难题
codevs 1225 八数码难题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Yours和zero在研究A*启 ...
随机推荐
- addLoadEvent方法解析
onload方法在网页加载完毕时,会自动执行,但是该方法有个缺点就是只能执行一个方法. onload的限制 比如下面的代码: <script type="text/javascript ...
- Python学习日记
江林楠学习了一下午后给大家呈现的20分钟速成Python—— 一些基本的语法:1.python无变量声明 直接a = []即可.2.python为对齐语言,用制表符表示语句块的嵌套.3.python语 ...
- jsp+oracle实现数据库内容以表格形式在前台显示(包含分页)
jsp+oracle实现数据库内容以表格形式在前台显示(包含分页) 在文件夹内新增list_emp.jsp 代码如下: <%@ page contentType="text/html& ...
- hive 使用笔记(partition; HDFS乱码)
6. insert 语句 1) 因为目标表有partition, 所以刚开始我使用的语句是 insert overwrite table sa_r_item_sales_day_week_month ...
- 学习笔记--(平衡树)splay
坑爹的splay,毁我青春,耗我钱财,颓我精力 是一种用于保存有序集合的简单高效的数据结构.伸展树实质上是一个二叉查找树.允许查找,插入,删除,删除最小,删除最大,分割,合并等许多操作,这些操作的时间 ...
- Linux File、File Directory IO Operation Summary(undone)
目录 . 引言 . Linux下文件操作API . Linux下文件目录操作API . Linux下的其他设备操作API 1. 引言 Linux支持多种文件系统,如ext.ext2.minix.iso ...
- Java NIO、NIO.2学习笔记
相关学习资料 http://www.molotang.com/articles/903.html http://www.ibm.com/developerworks/cn/education/java ...
- python库requests登录zhihu
废了很大劲,开始搞错了登录post信息的网址,后来没找到xsrf信息,看了很多文章才搞定. 大概过程如下: 打开登录页面,同时打开fldder,输入信息去监控过程. 查看post了哪些信息,哪些是自己 ...
- UVA1220Party at Hali-Bula(树的最大独立集 + 唯一性判断)
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=105116#problem/H 紫书P282 员工和直属老板只能选一个,最多选多少人 思路 ...
- --------------------------PHP中访问数据库时带来的响应速度的问题解决-------------------------------------
----------------------------------------------------------------上图是秒,下图是毫秒比较TTFB-------------------- ...