博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【HDOJ】3345 War Chess
阅读量:6306 次
发布时间:2019-06-22

本文共 2813 字,大约阅读时间需要 9 分钟。

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

1 /* 3345 */  2 #include 
3 #include
4 #include
5 #include
6 #include
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
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_JUDGE110 freopen("data.in", "r", stdin);111 freopen("data.out", "w", stdout);112 #endif113 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

你可能感兴趣的文章
SQL 多个表之间联合查询
查看>>
Winform开发框架之Office Ribbon界面
查看>>
[LeetCode] Largest Rectangle in Histogram
查看>>
关闭windows 2003 开机事件报错
查看>>
iOS - Mac OS X 终端设置
查看>>
Spring AOP基于配置文件的面向方法的切面
查看>>
DEDECMS之十 修改织梦链和文章的默认来源及作者
查看>>
将 ext_net 连接到 router - 每天5分钟玩转 OpenStack(145)
查看>>
混合开发(一)——WebView开发高级技巧之加载网页以及JavaScript,加载进度条...
查看>>
ASP.NET MVC之表单集合数据自动绑定到对象属性(集合)中
查看>>
基于HTML5+CSS3的图片旋转、无限滚动、文字跳动特效
查看>>
第 165 章 基于Web的系统管理软件
查看>>
创建 Machine - 每天5分钟玩转 Docker 容器技术(46)
查看>>
PostgreSQL 高并发任务分配系统 实践
查看>>
Android 监听锁屏、解锁、开屏 操作
查看>>
go开发环境Gogland
查看>>
MVC的基类
查看>>
SAP PP What is MRP Area And How Is It defined
查看>>
[20150228]DBMS_STATS Tracing.txt
查看>>
Java 中的 static 使用之静态变量&#183;静态方法&#183;静态初始化块
查看>>