博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU-4478 Where is the King 搜索
阅读量:6801 次
发布时间:2019-06-26

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

题意:给定N*N的网格,从某一点出发,问经过T时间后能够出现的位置有多少个?

解法:由于从一个点出去后可以原路返回,所以我们只需要记录某个点在T时刻内能否在奇时刻或是偶时刻到达。最后统计一下奇数和偶数时刻到达各点的情况。注意如果8个方向都没方法行走,那么就呆在原地。

代码如下:

#include 
#include
#include
#include
#include
#include
using namespace std;int N, T, sx, sy;char mp[105][105];char vis[105][105][2];struct Sta { int x, y, t; };queue
q;int dir[8][2]={ {-1,0},{-1,1},{ 0,1},{ 1,1},{ 1,0},{ 1,-1},{ 0,-1},{-1,-1}};inline bool judge(int x, int y) { if (x >= 0 && x < N && y >= 0 && y < N) return true; return false;}void cover(const Sta &cur) { Sta nxt; bool flag = false; for (int k = 0; k < 8; ++k) { nxt.x = cur.x + dir[k][0]; nxt.y = cur.y + dir[k][1]; nxt.t = cur.t + 1; if (judge(nxt.x, nxt.y) && mp[nxt.x][nxt.y] == '.') { flag = true; if (!vis[nxt.x][nxt.y][nxt.t&1]) { vis[nxt.x][nxt.y][nxt.t&1] = 1; if (nxt.t < T) { q.push(nxt); } } } } if (!flag) { nxt = cur; ++nxt.t; if (!vis[nxt.x][nxt.y][nxt.t&1]) { vis[nxt.x][nxt.y][nxt.t&1] = 1; if (nxt.t < T) { q.push(nxt); } } }}void solve() { while (!q.empty()) q.pop(); memset(vis, 0, sizeof (vis)); Sta cur, nxt; nxt.x = sx, nxt.y = sy, nxt.t = 0; vis[sx][sy][0] = 1; q.push(nxt); while (!q.empty()) { cur = q.front(), q.pop(); cover(cur); } int odd = 0, even = 0; for (int i = 0; i < N; ++i) { for (int j = 0; j < N; ++j) { if (vis[i][j][0]) ++even; if (vis[i][j][1]) ++odd; } } if (T & 1) printf("%d\n", odd); else printf("%d\n", even);}int main() { int C; scanf("%d", &C); while (C--) { scanf("%d %d %d %d", &N, &T, &sx, &sy); sx--, sy--; for (int i = 0; i < N; ++i) { scanf("%s", mp[i]); } solve(); } return 0; }

 

转载于:https://www.cnblogs.com/Lyush/archive/2013/06/08/3126765.html

你可能感兴趣的文章
在like 后面用系统变量来完成模糊查询
查看>>
[转]实习生需要懂的40大基本规矩
查看>>
AgileEAS.NET5.0-工作流平台-使用说明书(下)
查看>>
贪心算法
查看>>
警惕可执行文件:三类危险TXT类型文件
查看>>
网络安全没保障 40%多英国人不敢网上购物
查看>>
Simple example of using the Java Native Interface
查看>>
转:JXCollapsiblePane/JXTaskPane via NetBeans 6.9.1 designer
查看>>
职业生涯之规划1--基础知识
查看>>
VBS基础篇 - 对象(8) - Err对象
查看>>
转帖:深入理解JavaScript系列
查看>>
在Windows环境中使用版本管理工具Git(2)
查看>>
Android开发五 Android应用程序架构
查看>>
【发布】弹性分页类PagingBuild Class 附带测试
查看>>
<poj 1046>Color Me Less
查看>>
第k短路和A*
查看>>
Linux at命令定时发送邮件具体用法
查看>>
hudson无法访问问题,linux防火墙问题
查看>>
arcEngine 10 C++ 坐标转换【坐标系的投影】
查看>>
Java6 WebService学习
查看>>