简单BFS。注意最后一组数据,每个初始点不考虑周围是否有敌人。

 /* 3345 */
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
using namespace std; #define MAXN 105
#define INF 0xfffff typedef struct node_t {
int x, y, e;
node_t() {}
node_t(int xx, int yy, int ee) {
x = xx; y = yy; e = ee;
}
} node_t; char map[MAXN][MAXN];
bool stop[MAXN][MAXN];
int hp[MAXN][MAXN];
int hurt[MAXN][MAXN];
int n, m, mv;
int bx, by;
int dir[][] = {
-,,,-,,,,
}; void init() {
int i, j, k; memset(stop, false, sizeof(stop));
memset(hurt, -, sizeof(hurt));
for (i=; i<=n; ++i) {
for (j=; j<=m; ++j) {
if (map[i][j] == 'E') {
stop[i-][j] = stop[i][j-] = stop[i+][j] = stop[i][j+] = true;
hurt[i][j] = INF;
} else if (map[i][j] == 'Y') {
bx = i;
by = j;
} else if (map[i][j] == '.') {
hurt[i][j] = ;
} else if (map[i][j] == 'T') {
hurt[i][j] = ;
} else if (map[i][j] == 'R') {
hurt[i][j] = ;
} else if (map[i][j] == 'P') {
hurt[i][j] = ;
} else if (map[i][j] == '#') {
hurt[i][j] = INF;
}
}
}
} bool check(int x, int y) {
return x<= || x>n || y<= || y>m;
} void bfs() {
int x, y, e;
int i, j, k;
queue<node_t> Q;
node_t nd; memset(hp, -, sizeof(hp));
//if (stop[bx][by] == false)
Q.push(node_t(bx,by,mv));
hp[bx][by] = mv; while (!Q.empty()) {
nd = Q.front();
Q.pop(); for (i=; i<; ++i) {
x = nd.x + dir[i][];
y = nd.y + dir[i][];
if (check(x, y))
continue;
e = nd.e - hurt[x][y];
if (e > hp[x][y]) {
hp[x][y] = e;
if (stop[x][y] == false)
Q.push(node_t(x, y, e));
}
}
}
} void merge() {
int i, j, k; for (i=; i<=n; ++i) {
for (j=; j<=m; ++j) {
if (hp[i][j]>= && map[i][j]!='P') {
map[i][j] = '*';
}
}
}
map[bx][by] = 'Y';
} int main() {
int t;
int i, j, k; #ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif scanf("%d", &t);
while (t--) {
scanf("%d %d %d", &n, &m, &mv);
for (i=; i<=n; ++i)
scanf("%s", map[i]+);
init();
bfs();
merge();
for (i=; i<=n; ++i)
printf("%s\n", map[i]+);
printf("\n");
} return ;
}

【HDOJ】3345 War Chess的更多相关文章

  1. 【贪心】【Uva11729】 Commando War

    你有n个部下,每个部下需要完成一项任务.第i个部下需要你花Bi分钟交待任务,然后他会立刻独立地.无间断地执行Ji分钟后完成任务.你需要选择交待任务的顺序,使得所有任务尽早执行完毕(即最后一个执行完的任 ...

  2. hdu 3345 War Chess

    War Chess Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Sub ...

  3. HDU - 3345 War Chess 广搜+优先队列

    War chess is hh's favorite game: In this game, there is an N * M battle map, and every player has hi ...

  4. 【HDOJ】【4405】Aeroplane chess飞行棋

    概率DP/数学期望 kuangbin总结中的第4题 啊还是求期望嘛……(话说Aeroplane chess这个翻译怎么有种chinglish的赶脚……) 好像有点感觉了…… 首先不考虑直飞的情况: f ...

  5. 【HDOJ】2809 God of War

    状态DP. /* 2809 */ #include <iostream> #include <queue> #include <cstdio> #include & ...

  6. 【HDOJ】4729 An Easy Problem for Elfness

    其实是求树上的路径间的数据第K大的题目.果断主席树 + LCA.初始流量是这条路径上的最小值.若a<=b,显然直接为s->t建立pipe可以使流量最优:否则,对[0, 10**4]二分得到 ...

  7. 【HDOJ】【2829】Lawrence

    DP/四边形不等式 做过POJ 1739 邮局那道题后就很容易写出动规方程: dp[i][j]=min{dp[i-1][k]+w[k+1][j]}(表示前 j 个点分成 i 块的最小代价) $w(l, ...

  8. 【HDOJ】【3506】Monkey Party

    DP/四边形不等式 裸题环形石子合并…… 拆环为链即可 //HDOJ 3506 #include<cmath> #include<vector> #include<cst ...

  9. 【HDOJ】【3516】Tree Construction

    DP/四边形不等式 这题跟石子合并有点像…… dp[i][j]为将第 i 个点开始的 j 个点合并的最小代价. 易知有 dp[i][j]=min{dp[i][j] , dp[i][k-i+1]+dp[ ...

随机推荐

  1. 利用 SysRq 键排除和诊断系统故障

    说白了,SysRq手动触发而不用命令, /proc/sysrq-trigger 这个是通过命令接口 实验:LINUX窗口下 ,CTRL+ALT+F1,切换到TTY1,在文本模式下,按下 ALT+Sys ...

  2. 『零行代码』解决键盘遮挡问题(iOS)

    关注仓库,及时获得更新:iOS-Source-Code-Analyze https://github.com/draveness/iOS-Source-Code-Analyze Follow: Dra ...

  3. Eclipse3.7默认字体修改-找回Courser-New字体

    1.找到jFace并用WinRAR打开之: jFace的具体位置:$Eclipse目录$/plugins/org.eclipse.jface_3.7.0.I20110522-1430.jar,找到后, ...

  4. TCP/IP协议原理与应用笔记02:断点续传

    1.断点续传简介:       FTP(文件传输协议的简称)(File Transfer Protocol. FTP)客户端软件断点续传指的是在下载或上传时,将下载或上传任务(一个文件或一个压缩包)人 ...

  5. Java——(二)Java集合容器

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.基本概念 1)Collection:一个独立元素的序列,这些元素都服从一条或多条规则.Lis ...

  6. Lamp环境部署指南

    1.安装apache 1)安装httpd: yum install httpd 2)启动httpd服务 service httpd start 2.安装mysql 1)安装mysql yum inst ...

  7. ASP.NET JSON的序列化和反序列化 之 Newtonsoft.Json

    我们用到的类库为:Newtonsoft.Json,通过VS工具中NuGet程序包可以下载. 一:对象转json-序列化 public class Student { public int ID { g ...

  8. 实训第一天--增删改查加hibernate+搭建环境常见问题

    1.     搭建环境 安装 1)谷歌浏览器 2)jdk-7u67-windows-i586.exe 3)Tomcat7 4)NavicatforMySQL 两种方式: ftp://172.21.95 ...

  9. Android手机修改Hosts的方法

    Android手机是和Google帐号紧密联系的,由于中国的操蛋情况,很多时候Google帐号无法登录,导致Android市场无法使用. 在电脑上我们通过修改Hosts方法可以解决Google帐号的登 ...

  10. Orace数据库锁表的处理与总结<摘抄与总结一>

    TM锁(表级锁)类型共有5种,分别称为共享锁(S锁).排它锁(X锁).行级共享锁(RS锁).行级排它锁(RX锁).共享行级排它锁(SRX锁) 当Oracle执行DML语句时,系统自动在所要操作的表上申 ...