设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1900|回复: 4
打印 上一主题 下一主题

[通用发布] 【演算法】Ruby 裡的 Heap

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
193 小时
注册时间
2013-3-24
帖子
448
跳转到指定楼层
1
发表于 2013-12-19 22:22:07 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
最近想寫個尋路演算法的時候,查了一下,找不到RGSS裡面有Priority queue(heap)....

沒有Heap怎麼弄A*阿...

所以就很無聊的把C++裡面STL的Priority queue包成個DLL檔,這樣就有Heap可以用了
p.s.這是最大堆

用法:

RUBY 代码复制
  1. $Heap_is_empty = Win32API.new('heap.dll', 'is_empty', 'v', 'i') #檢查是否為空
  2. $Heap_clear = Win32API.new('heap.dll', 'clear', 'v', 'v') #清空
  3. $Heap_push = Win32API.new('heap.dll', 'push', 'ii', 'v') #放入,第一個為優先度,第二個為儲存之數值
  4. $Heap_top = Win32API.new('heap.dll', 'top', 'v', 'i') #取頂部,回傳第二個數值
  5. $Heap_pop = Win32API.new('heap.dll', 'pop', 'v', 'v') #推出
  6.  
  7. $Heap_clear.call()
  8. $Heap_push.call(1,2)
  9. $Heap_push.call(3,4)
  10. $Heap_push.call(-1,9)
  11. if $Heap_is_empty.call() == 0
  12.   p $Heap_top.call()  #4
  13.   $Heap_pop.call()
  14.   p $Heap_top.call()  #2
  15.   $Heap_pop.call()
  16.   p $Heap_top.call()  #9
  17.   $Heap_pop.call()
  18. end


話說我存xy座標是把一個int拿來當兩個short用(座標不會超過30K嘛

heap.rar

208.59 KB, 下载次数: 66

Heap

Lv1.梦旅人

梦石
0
星屑
50
在线时间
466 小时
注册时间
2013-2-8
帖子
424
5
发表于 2013-12-21 00:16:54 手机端发表。 | 只看该作者
不错,虽然数组也差不多....
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
653
在线时间
3774 小时
注册时间
2011-2-26
帖子
1839

开拓者

4
发表于 2013-12-20 00:22:21 手机端发表。 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv2.观梦者 (暗夜天使)

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
帖子
2309

贵宾

3
发表于 2013-12-19 23:58:53 | 只看该作者
怎么写DLL呢,可以给个比较简单源码看看吗?不知楼主用的什么编译器,我用的是VS2010
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
41646
在线时间
7596 小时
注册时间
2009-7-6
帖子
13505

开拓者贵宾

2
发表于 2013-12-19 23:27:27 | 只看该作者
本帖最后由 fux2 于 2013-12-19 23:43 编辑

数组就可以替代heap吧,你用push(<<)和pop以及shiftunshift就行。
你要在RM里写A*用table配合数组我想不到有什么比ruby更好写的了。
要是有强迫症一定要用heap你可以用hash更无脑。
如果还是写不出来那么很遗憾朋友我只能说你要么对ruby理解不深要么对A*理解不够。

PS:补充一下,楼主是不是不知道ruby的数组可以装任意类型……而且不用是单一类型。数组里面套数组也是被允许的。

点评

STL的堆求最小值的时间复杂度比数组遍历低  发表于 2013-12-22 01:20
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-10 17:19

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表