pku 1475 Pushing Box 双重BFS

这是我写的第一个双重dfs, 参考了一下别人的思想.
主要是当箱子向四周扩展进行bfs时, 同时对人进行bfs.
具体描述如下:
当箱子(box_x, box_y)向某一个方向i前进到(box_x+dx[i], box_y[i]+dy[i]),
必须是人在位置(px-dx[i], py-dy[i])推动.
所以, 我们再对人进行bfs, 看能否从人的开始位置(people_x, people_y)前进到
(px-dx[i], py-dy[i]).

0ms的算法我大致看了一下, 和这个不同的是状态的保存, 我使用了string并作为已走
路径放在状态(State)结构体中, 要耗时一些.

如果你觉得这个程序有什么可以改进, 请你一定告诉我.

 

另外, 我发现这题跟你的初始方向设置有关系, poj数据不够大.

当我方向顺序设置如下时, WA
char dir[] = {'w', 'n', 'e', 's'};
char DIR[] = {'W', 'N', 'E', 'S'};

当我再改为如下顺序时, AC
char dir[] = {'n', 's', 'w', 'e' };
char DIR[] = {'N', 'S', 'W', 'E' };

说明poj的数据还是不够.

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值