【散分】经典数学问题“空瓶换酒”求解

paschen 2018-04-07 04:05:23
加精
一时兴起,研究了一下经典的“空瓶换酒”问题 虽不算很难,假期有空自己推导了下,并写了个程序,具体见链接: https://blog.csdn.net/paschen/article/details/79840114 欢迎各位交流~
...全文
5750 8 收藏 37
写回复
37 条回复
归途醉染 2018年04月22日
回复 点赞
waynedzy 2018年04月18日
我也感觉理解别人思路比自己去想还复杂,而且加入了可以借酒瓶感觉难度加大了好多
回复 点赞
sichuanwww 2018年04月17日
回复 点赞
You2Me2Our 2018年04月16日
写的真好,点个赞。
回复 点赞
freesp 2018年04月12日
进来接一下分。
回复 点赞
A1200266 2018年04月12日
谢谢楼主分享
回复 点赞
赵4老师 2018年04月11日
代码风格找zhao4zhong1 https://bbs.csdn.net/topics/380157851
回复 点赞
paschen 2018年04月11日
引用 26 楼 yiyefangzhou24 的回复:
[quote=引用 25 楼 paschen 的回复:] [quote=引用 24 楼 yiyefangzhou24 的回复:] 版主的代码风格很保守嘛
此话怎讲[/quote]其实是褒义词,看着很舒服[/quote] 好吧,其实代码风格一般啦,基本没写什么注释
回复 点赞
yiyefangzhou24 2018年04月11日
引用 25 楼 paschen 的回复:
[quote=引用 24 楼 yiyefangzhou24 的回复:] 版主的代码风格很保守嘛
此话怎讲[/quote]其实是褒义词,看着很舒服
回复 点赞
yiyefangzhou24 2018年04月11日
版主的代码风格很保守嘛
回复 点赞
paschen 2018年04月11日
引用 24 楼 yiyefangzhou24 的回复:
版主的代码风格很保守嘛
此话怎讲
回复 点赞
qq_39412162 2018年04月11日
学习了,嘿嘿
回复 点赞
赵4老师 2018年04月09日
引用 17 楼 paschen 的回复:
引用 16 楼 赵4老师的回复:
[quote=引用 11 楼 kobehahaha 的回复:] [quote=引用 4 楼 zhao4zhong1 的回复:] 百度搜相关关键字。
赵兄是只看了一个标题啊。。
我的意思是我就不信百度搜不到针对此类问题在楼主之前就没人比楼主解决的更好。[/quote] 我可没说我解决的是最好的 由于问题本身不难,自己推导了下,理解别人思路比自己去想还复杂[/quote] 同感! 前两天我就理解不了A*寻路算法,自己造了一个比较好理解的寻路算法:
设置当前行走模式为左手不摸墙。
设置当前行走模式不是按既定最短绕墙路线行走。
①
如果到达目标abs(tx-x)<=robotl/2 && abs(ty-y)<=robotw/2,算法结束。
如果当前行走模式不是按既定最短绕墙路线行走:
  如果当前行走模式为左手不摸墙:
    根据机器人和目标的tx,ty坐标的差的大小和符号,确定当前方向。
    根据遇到障碍情况调整当前方向。具体为:
      前方无障碍,=>④
前方有障碍,按照前方撞墙,右转,左手摸墙继续前行模式改变当前方向,直到当前方向无障碍,
计算既定最短绕墙路线,目标位置tx,ty,具体算法为:
 记住起点位置robotx,roboty,保持左手摸墙往前走,直到到达目标tx,ty或回到起点,记录经过的所有位置的方向和距离dis(i)=abs(tx-x)+abs(ty-y)
 如果到达目标abs(tx-x)<=robotl/2 && abs(ty-y)<=robotw/2,返回刚记录的pathn,pathd=dirs
 如果回到起点则必然组成一个环形路径。
 在组成环形路径的所有位置中,选择一个abs(tx-x)+abs(ty-y)最小的位置m作为本次要去的目标,
 再在逆时针或顺时针绕圈从起点到达m的两个方向中选较短的方向,作为pathn,dirs返回。
      按照刚计算好的既定最短绕墙路线走下一步,并进入按既定最短绕墙路线行走模式。
如果当前行走模式是按既定最短绕墙路线行走:
按照计算好的既定最短绕墙路线走下一步。
如果走完既定最短绕墙路线,回到左手不摸墙行走模式。
④
向前走一步。
=>①
回复 点赞
paschen 2018年04月09日
引用 16 楼 赵4老师的回复:
引用 11 楼 kobehahaha 的回复:
[quote=引用 4 楼 zhao4zhong1 的回复:] 百度搜相关关键字。
赵兄是只看了一个标题啊。。
我的意思是我就不信百度搜不到针对此类问题在楼主之前就没人比楼主解决的更好。[/quote] 我可没说我解决的是最好的 由于问题本身不难,自己推导了下,理解别人思路比自己去想还复杂
回复 点赞
赵4老师 2018年04月09日
引用 11 楼 kobehahaha 的回复:
引用 4 楼 zhao4zhong1 的回复:
百度搜相关关键字。
赵兄是只看了一个标题啊。。
我的意思是我就不信百度搜不到针对此类问题在楼主之前就没人比楼主解决的更好。
回复 点赞
walkereklaw 2018年04月09日
后排接分,并且赞了一下楼主!
回复 点赞
zhouqunhai 2018年04月09日
大佬,小弟有点看不懂。。。
回复 点赞
paschen 2018年04月09日
引用 19 楼 zhao4zhong1 的回复:
引用 17 楼 paschen 的回复:
[quote=引用 16 楼 赵4老师的回复:][quote=引用 11 楼 kobehahaha 的回复:] [quote=引用 4 楼 zhao4zhong1 的回复:] 百度搜相关关键字。
赵兄是只看了一个标题啊。。
我的意思是我就不信百度搜不到针对此类问题在楼主之前就没人比楼主解决的更好。[/quote] 我可没说我解决的是最好的 由于问题本身不难,自己推导了下,理解别人思路比自己去想还复杂[/quote] 同感! 前两天我就理解不了A*寻路算法,自己造了一个比较好理解的寻路算法:
设置当前行走模式为左手不摸墙。
设置当前行走模式不是按既定最短绕墙路线行走。
①
如果到达目标abs(tx-x)<=robotl/2 && abs(ty-y)<=robotw/2,算法结束。
如果当前行走模式不是按既定最短绕墙路线行走:
  如果当前行走模式为左手不摸墙:
    根据机器人和目标的tx,ty坐标的差的大小和符号,确定当前方向。
    根据遇到障碍情况调整当前方向。具体为:
      前方无障碍,=>④
前方有障碍,按照前方撞墙,右转,左手摸墙继续前行模式改变当前方向,直到当前方向无障碍,
计算既定最短绕墙路线,目标位置tx,ty,具体算法为:
 记住起点位置robotx,roboty,保持左手摸墙往前走,直到到达目标tx,ty或回到起点,记录经过的所有位置的方向和距离dis(i)=abs(tx-x)+abs(ty-y)
 如果到达目标abs(tx-x)<=robotl/2 && abs(ty-y)<=robotw/2,返回刚记录的pathn,pathd=dirs
 如果回到起点则必然组成一个环形路径。
 在组成环形路径的所有位置中,选择一个abs(tx-x)+abs(ty-y)最小的位置m作为本次要去的目标,
 再在逆时针或顺时针绕圈从起点到达m的两个方向中选较短的方向,作为pathn,dirs返回。
      按照刚计算好的既定最短绕墙路线走下一步,并进入按既定最短绕墙路线行走模式。
如果当前行走模式是按既定最短绕墙路线行走:
按照计算好的既定最短绕墙路线走下一步。
如果走完既定最短绕墙路线,回到左手不摸墙行走模式。
④
向前走一步。
=>①
[/quote] 哈,编程的快感之一在于把一团复杂的逻辑关系慢慢理清
回复 点赞
cbzjzsb123 2018年04月08日
记得初中考高中,就有这道题,答完就觉得错了,然后果然错了。没考虑先借酒瓶的情况。
回复 点赞
paschen 2018年04月08日
引用 13 楼 cbzjzsb123 的回复:
记得初中考高中,就有这道题,答完就觉得错了,然后果然错了。没考虑先借酒瓶的情况。
初次做能想到的人不多
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告