【HDOJ】3345 War Chess
简单BFS。注意最后一组数据,每个初始点不考虑周围是否有敌人。
1 /* 3345 */ 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 #include <cstdlib> 6 #include <queue> 7 using namespace std; 8 9 #define MAXN 105 10 #define INF 0xfffff 11 12 typedef struct node_t { 13 int x, y, e; 14 node_t() {} 15 node_t(int xx, int yy, int ee) { 16 x = xx; y = yy; e = ee; 17 } 18 } node_t; 19 20 char map[MAXN][MAXN]; 21 bool stop[MAXN][MAXN]; 22 int hp[MAXN][MAXN]; 23 int hurt[MAXN][MAXN]; 24 int n, m, mv; 25 int bx, by; 26 int dir[4][2] = { 27 -1,0,0,-1,1,0,0,1 28 }; 29 30 void init() { 31 int i, j, k; 32 33 memset(stop, false, sizeof(stop)); 34 memset(hurt, -1, sizeof(hurt)); 35 for (i=1; i<=n; ++i) { 36 for (j=1; j<=m; ++j) { 37 if (map[i][j] == 'E') { 38 stop[i-1][j] = stop[i][j-1] = stop[i+1][j] = stop[i][j+1] = true; 39 hurt[i][j] = INF; 40 } else if (map[i][j] == 'Y') { 41 bx = i; 42 by = j; 43 } else if (map[i][j] == '.') { 44 hurt[i][j] = 1; 45 } else if (map[i][j] == 'T') { 46 hurt[i][j] = 2; 47 } else if (map[i][j] == 'R') { 48 hurt[i][j] = 3; 49 } else if (map[i][j] == 'P') { 50 hurt[i][j] = 1; 51 } else if (map[i][j] == '#') { 52 hurt[i][j] = INF; 53 } 54 } 55 } 56 } 57 58 bool check(int x, int y) { 59 return x<=0 || x>n || y<=0 || y>m; 60 } 61 62 void bfs() { 63 int x, y, e; 64 int i, j, k; 65 queue<node_t> Q; 66 node_t nd; 67 68 memset(hp, -1, sizeof(hp)); 69 //if (stop[bx][by] == false) 70 Q.push(node_t(bx,by,mv)); 71 hp[bx][by] = mv; 72 73 while (!Q.empty()) { 74 nd = Q.front(); 75 Q.pop(); 76 77 for (i=0; i<4; ++i) { 78 x = nd.x + dir[i][0]; 79 y = nd.y + dir[i][1]; 80 if (check(x, y)) 81 continue; 82 e = nd.e - hurt[x][y]; 83 if (e > hp[x][y]) { 84 hp[x][y] = e; 85 if (stop[x][y] == false) 86 Q.push(node_t(x, y, e)); 87 } 88 } 89 } 90 } 91 92 void merge() { 93 int i, j, k; 94 95 for (i=1; i<=n; ++i) { 96 for (j=1; j<=m; ++j) { 97 if (hp[i][j]>=0 && map[i][j]!='P') { 98 map[i][j] = '*'; 99 } 100 } 101 } 102 map[bx][by] = 'Y'; 103 } 104 105 int main() { 106 int t; 107 int i, j, k; 108 109 #ifndef ONLINE_JUDGE 110 freopen("data.in", "r", stdin); 111 freopen("data.out", "w", stdout); 112 #endif 113 114 scanf("%d", &t); 115 while (t--) { 116 scanf("%d %d %d", &n, &m, &mv); 117 for (i=1; i<=n; ++i) 118 scanf("%s", map[i]+1); 119 init(); 120 bfs(); 121 merge(); 122 for (i=1; i<=n; ++i) 123 printf("%s\n", map[i]+1); 124 printf("\n"); 125 } 126 127 return 0; 128 }
转载于:https://www.cnblogs.com/bombe1013/p/4284271.html
【HDOJ】3345 War Chess相关推荐
- 【HDOJ】4602 Partition
[题目]http://acm.hdu.edu.cn/showproblem.php?pid=4602 [报告] 直接贴上标程解题报告:(虽然有些纠结,试一下就弄通了..) Problem C. Par ...
- 【HDOJ】4602 Partition_天涯浪子_新浪博客
[题目]http://acm.hdu.edu.cn/showproblem.php?pid=4602 [报告] 直接贴上标程解题报告:(虽然有些纠结,试一下就弄通了..) Problem C. Par ...
- 【HDOJ】1008 Elevator_天涯浪子_新浪博客
[题目] http://acm.hdu.edu.cn/showproblem.php?pid=1008 [报告] 这是我在HDOJ里看到的最水的题目,至少目前为止. 题目里已经讲得很清楚了,模拟就能过 ...
- 【HDOJ】1022 Train Problem I_天涯浪子_新浪博客
[题目]http://acm.hdu.edu.cn/showproblem.php?pid=1022 [报告] 模拟,直接模拟一个栈的运行就行了. [程序] // Task: 1022 Train P ...
- 【HDOJ】1003 Max Sum_天涯浪子_新浪博客
[题目]http://acm.hdu.edu.cn/showproblem.php?pid=1003 [报告] 既然是子区间加和问题,可以用减法来处理.比如求[5..10]的和,可以直接用[1..10 ...
- 【HDOJ】4768 Flyer_天涯浪子_新浪博客
[题目]http://acm.hdu.edu.cn/showproblem.php?pid=4768 [报告] 题目中已经说了,保证最多出现一个奇数,所以可以用异或的想法.把所有的数异或起来,如果最后 ...
- 【HDOJ】4699 Editor_天涯浪子_新浪博客
[题目] http://acm.hdu.edu.cn/showproblem.php?pid=4699 [报告] 模拟题吧,本身不是很难. 最初的想法是用Splay tree写,然后疯掉了.苏牛说2B ...
- 【HDOJ】4704 Sum_天涯浪子_新浪博客
[题目] http://acm.hdu.edu.cn/showproblem.php?pid=4704 [报告] S(K)显然就是N的K正整数划分数.所以SUM{S(K),1<=K<=N} ...
- 【HDOJ】1015 Safecracker_天涯浪子_新浪博客
[题目]http://acm.hdu.edu.cn/showproblem.php?pid=1015 [报告] 题目写的很长,忽略一系列废话,题意就是求一个方程v - w^2 + x^3 - y^4 ...
最新文章
- java工程webservice的应用案例
- 微信小程序去除左上角返回的按钮
- 第四代测序(纳米孔测序)有望全面代替边合成边测序吗?
- POJ1703带权并查集(距离或者异或)
- Java_斐波那契数列_兔子生兔子算法
- EventBus/EventQueue 再思考
- python导出csv有引号_python – csv中的双引号元素不能用pandas读取
- (33)FPGA面试技能提升篇(MIPI接口)
- python怎么启动服务器_如何在Python单元中从命令行启动服务器
- Axure原型模板CRM客户关系管理系统高保真原型设计
- Xxmm_Move_Order_Print
- 文献解读|基于转录组-蛋白质组数据联合分析对煎蛋水母毒性评价、毒素筛选及其干预
- python 蓝桥杯排序
- 【thm】windows内网提权之Windows PrivEsc
- 人工智能导论(数据挖掘)
- Qt 6.3.1 显示界面元素
- 洛谷 P2141 珠心算测验
- QTableWidget大数据文件显示(1000万行数据)
- python:ImportError: cannot import name ‘xx‘ from ‘xxxx‘
- 数据规整:连接、联合与重塑(数据分析)