HDU 5335 Walk Out(Bfs搜索字典序最小的最短路)

博客介绍了如何解决从(1,1)到(1000,1000)的最小二进制序列问题,通过BFS搜索连通块并避免字典序错误和重复节点导致的MLE问题。" 107983744,7741420,Oracle数据库扩容问题:ORA-01144错误解决,"['数据库管理', 'Oracle', '数据库扩容']
摘要由CSDN通过智能技术生成


题意:nXm的地图, 问通过四个方向从(1,1)走到(1000,1000)所经过的最小二进制序列是多少,忽略前缀0.

思路:首先如果起点为0,那么我们bfs搜索和起点0联通的为0的连通块,这样我们第一步肯定是从与这个连通块相邻的且与重点最近的地方出发。

将所有可能起点加入队列,在bfs一遍找到字典序最小的那条路就是答案,

在这里可以用两个vector类型容器,一个是q2存储所有节点值存为0的结点,

另一个q3存储节点值为1的结点。

那么如果q2不为空那么也就是有可以走零,那么就从这里面选,否则从q3中选。

ps:下午比赛时各种doubi,先是dfs无悬念超时....然后改成把求字典序的那个dfs改成了bfs结果re访问非法.......改了后结果爆栈.........最后改了一发觉得肯定对了然而mle了......

直到比赛结束也没发现为啥mle了,写了三个半小时要哭了..........回来后发现是因为最开始搜索连通块时我是每次访问结点时才置vis为1而不是每次添加结点时就置vis为1,这样每次会添加很多重复结点肯定会mle...........哭晕在厕所,本来可以

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值