查看: 1501|回复: 2

[已经解决] 求一范围算法

[复制链接]
梦石
0
星屑
1408
在线时间
831 小时
注册时间
2007-12-25
回帖
1406
发表于 2010-11-1 22:51:19 | 显示全部楼层 |阅读模式

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

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

×
SOU到了敌人AI 开发了,对于只有一个主角
来说还暂时不考虑这个,但是如果开发队友系统
并且队友也会群攻的话……


未命名.jpg

这里有一个固定长宽的矩形框

求矩形框的位置,在这个位置内有最多的敌人数量。

点评

这问的是思路。连你也不懂了,你也小? 倒着长了?  发表于 2010-11-2 17:15
同板凳,神尊殿的SOU系统不是VX的吗.  发表于 2010-11-2 17:14
精卫赤龙腾    九
总是存在一种强大,去完成似乎不可能的事情.
无畏战乾程    夜
或是需要一种勇气,去挑战几乎不存在的胜利.
一味玄真魂     神
这是拥有一种恒心,去化解根本没有解的困难.
烈卫开天径    尊
只是带着一种决心,去争取残存的最后的希望。

旅之愚者

梦石
0
星屑
560
在线时间
814 小时
注册时间
2007-7-28
回帖
2121

贵宾

发表于 2010-11-1 23:50:02 | 显示全部楼层
本帖最后由 六祈 于 2010-11-1 23:52 编辑

于是跟上一个方案,接受批斗

  1. def find_rect(total_width, total_height, rect_width, rect_height, events)
  2. weight_array = Array.new(total_width * total_height){0}
  3. events.each{|event| add_weight(event, rect_width, rect_height)}
  4. max_index = weight_array.index weight_array.sort[-1]
  5. return max_index % total_width + 1, max_index / total_width + 1
  6. end
  7. def add_weight(event, rect_width, rect_height)
  8. index = event.x * total_width + event.y
  9. for i in 0...rect_width
  10. for j in 0...rect_height
  11. arr[index - i - j * total_width] += 1
  12. end
  13. end
  14. end
复制代码
算法思路:
构建各个初始点【将该点作为矩形左上点】的权重数组weight_array,并初始化所有元素为0;
迭代每一个事件,将被迭代事件作为矩形右下角,加成权重数组的元素;
取出权重数组的最大值索引,对total_width取余加1为x,除以total_width加1得到y

点评

似乎好方法~  发表于 2010-11-2 17:37

评分

参与人数 1星屑 +376 收起 理由
fux2 + 376 认可答案+脸熟~

查看全部评分

回复

使用道具 举报

尽头

梦石
0
星屑
119
在线时间
278 小时
注册时间
2010-6-20
回帖
1204
发表于 2010-11-2 17:03:37 | 显示全部楼层
拜托..这里是XP提问区..

点评

你不懂你还小  发表于 2010-11-2 17:14
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部