【HDOJ】3345 War Chess
2015-02-10 16:32
106 查看
简单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[4][2] = { -1,0,0,-1,1,0,0,1 }; void init() { int i, j, k; memset(stop, false, sizeof(stop)); memset(hurt, -1, sizeof(hurt)); for (i=1; i<=n; ++i) { for (j=1; j<=m; ++j) { if (map[i][j] == 'E') { stop[i-1][j] = stop[i][j-1] = stop[i+1][j] = stop[i][j+1] = true; hurt[i][j] = INF; } else if (map[i][j] == 'Y') { bx = i; by = j; } else if (map[i][j] == '.') { hurt[i][j] = 1; } else if (map[i][j] == 'T') { hurt[i][j] = 2; } else if (map[i][j] == 'R') { hurt[i][j] = 3; } else if (map[i][j] == 'P') { hurt[i][j] = 1; } else if (map[i][j] == '#') { hurt[i][j] = INF; } } } } bool check(int x, int y) { return x<=0 || x>n || y<=0 || y>m; } void bfs() { int x, y, e; int i, j, k; queue<node_t> Q; node_t nd; memset(hp, -1, 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=0; i<4; ++i) { x = nd.x + dir[i][0]; y = nd.y + dir[i][1]; 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=1; i<=n; ++i) { for (j=1; j<=m; ++j) { if (hp[i][j]>=0 && 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=1; i<=n; ++i) scanf("%s", map[i]+1); init(); bfs(); merge(); for (i=1; i<=n; ++i) printf("%s\n", map[i]+1); printf("\n"); } return 0; }
相关文章推荐
- hdoj 3345 War Chess (搜索,优先队列)
- hdu 3345 War Chess(BFS 判断条件稍多,有陷阱)
- HDU - 3345 - War Chess
- hdu 3345 War Chess
- HDU 3345 - War Chess
- hdu 3345 war chess
- HDU 3345 War Chess (BFS)
- hdu 3345 War Chess(广搜,用不用优先队列都可以)
- hdu 3345 War Chess(BFS+模拟)
- hdu 3345 War Chess (bfs+优先队列)
- HDU 3345 War Chess
- HDU 3345 war chess(bfs + 优先队列)
- HDU - 3345 War Chess (记忆化搜索bfs+优先队列)
- hdu-3345-War Chess(bfd,条件众多)
- hdu 3345——War Chess
- HDU 3345 War Chess (优先队列)
- hdu 3345 War Chess(bfs)
- hdu 3345 War chess(bfs)
- HDOJ 2189 悼念512汶川大地震遇难同胞——来生一起走
- HDOJ 1875 畅通工程再续---最小生成树问题