博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Uva 1061 The Morning after Halloween
阅读量:4919 次
发布时间:2019-06-11

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

基本思路是BFS:

  1. 题目中已经说了,每相连的2X2格子中必有一个‘#’,也就是,每个点周围最多也就三个方向可以走。因此,可以把所有空格都提出来,形成一个图,直接遍历每条边,而不是每次判断4个方向是否可以走

  2.关于结点判重,最初的想法是想用一个六维数组,后来参考了其它,发现其实可以用一个三维数字代替,每个点可以用数字代替,因为题目中整个图最多为16X16,所以数字最大为16*16 = 256,这样做的另一个好处是,移动字母也方便了,可以用数字代替点,比如从(0, 0)移动到(0,1)可以考做是从 0 移动到 1

  3.N的数量不一,移动时要不要判断是N是多少?这是我刚开始的想法,个人采用递归的方法,先放一个点,再放下一个点,观察这是不是最后一个要移动的点,相对而言,比对每个N值进行单独处理要简单点。

 

注意点:题目输入的W,H,N中W是指宽度,即列数,而H即为行数。

 

收获及感悟:刚开始看到这题的时候已经吓着了,首先就是如何保存三个点状态,真的差点用六维数组或map了。在这里也学了一招,用整数依次标记每个点。另外,关于题意,刚开始理解不透,还在想a,b,c三者的先后移动顺序,后来发现想多了,任意顺序移动,判断移动后的状态是否可行即可。这题是在看了别人代码后才A掉的,非常感谢发布题解的同学。

 

参考资料:

  1.

  2.《算法竞赛入门经典(第2版)》

#include 
using namespace std;const int MAXN = 16 + 5;char plan[MAXN][MAXN];int W, H, N;vector
link[MAXN*MAXN];bool vis[MAXN*MAXN][MAXN*MAXN][MAXN*MAXN];int dir[4][2] = {0,1, 0,-1, 1,0, -1,0};struct State{ int ghostPos[5], step;};State finalState, firstState;// more than one ghost occupy a same position// p is the prev state, whether two ghots in s exchange with their positionbool isCollisionOrExChange(State& s, State& p) { for(int i=0; i
& q, State& former) { for(size_t i=0; i
q; firstState.step = 0; q.push(firstState); SetVis(firstState, true); while(!q.empty()) { State t = q.front(); q.pop(); // Test(t); if(IsFinal(t)) { return t.step; } State newS; newS.step = t.step + 1; NextState(newS, 0, q, t); } return -1;}// Make a Graphvoid MakeLink() { for(int i=0; i
=0 && x
=0 && y
> W >> H >> N) { if(!W && !H && !N) { break; } Work(); } return 0;}

 

  

转载于:https://www.cnblogs.com/Emerald/p/4721890.html

你可能感兴趣的文章
C# IO 随笔
查看>>
Console-算法[for,if]-不用第三个变量,交换两字符串的值
查看>>
举例说明$POST 、$HTTP_RAW_POST_DATA、php://input三者之间的区别
查看>>
前端接受文件调用后台上传文件的方法
查看>>
ESRI ArcGIS Desktop v10.2-ISO 1DVD
查看>>
win10查看激活到期时间
查看>>
(24)How generational stereotypes hold us back at work
查看>>
CentOS下配置iptables防火墙
查看>>
实验五(数组与指针)
查看>>
编程的智慧(王垠)(http://www.cocoachina.com/programmer/20151125/14410.html)
查看>>
windows XP声音图标无法放入任务栏
查看>>
线性渐变的兼容性写法
查看>>
简单的同步MSMQ
查看>>
关于position的定位
查看>>
应用程序-特定 权限设置并未向在应用程序容器 不可用SID
查看>>
Matlab图像处理工具箱用户指南——裁剪图像及空间变换部分翻译
查看>>
Cookie and Session的介绍
查看>>
MySQL架构
查看>>
斯坦福机器学习-第三周(分类,逻辑回归,过度拟合及解决方法) ...
查看>>
Python 三级菜单
查看>>