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

Project1

 找回密码
 注册会员
搜索
楼主: 幻の飞鱼
打印 上一主题 下一主题

数组的一个排列算法问题,小鱼纠结了^求助

 关闭 [复制链接]

Lv3.寻梦者

梦石
1
星屑
916
在线时间
101 小时
注册时间
2006-3-27
帖子
1081
11
 楼主| 发表于 2008-3-30 05:51:26 | 只看该作者
刚头晕去吃夜宵了,我来思考下
回复 支持 反对

使用道具 举报

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

12
发表于 2008-3-30 06:56:49 | 只看该作者
没测试,可能会有问题,但思路很清晰,回溯法。


@test = [[6,7,8,5],[2,3,5],[5,7,9,8,7]]

def get_new_arg(arg)
    @max = arg.size - 1
    @max_h = arg.last.size
    @arg = arg
    @w = -1
    @new_arg = Array.new
   
    find_list([], 0)
   
    return @new_arg
end  

def find_list(list, index)  
    @h = 0
    @test[index].each{|a|
        if index == @max
           @new_arg << (list + [a])     
           @h += 1
           if @h == @max_h
              return
           end
        else
           l = (list + [a]).clone
           find_list(l, index + 1)      
        end  
    }
end  
  
p get_new_arg(@test)

系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
1
星屑
916
在线时间
101 小时
注册时间
2006-3-27
帖子
1081
13
 楼主| 发表于 2008-3-30 07:02:05 | 只看该作者
以下引用美兽于2008-3-29 22:56:49的发言:

没测试,可能会有问题,但思路很清晰,回溯法。



@test = [[6,7,8,5],[2,3,5],[5,7,9,8,7]]

def get_new_arg(arg)
   @max = @test.size - 1
   @max_h = @test.last.size
   @arg = arg
   @w = -1
   @new_arg = Array.new
   
   find_list([], 0)
   
   return @new_arg
end  

def find_list(list, index)  
   @h = 0
   @test[index].each{|a|
       if index == @max
          @new_arg << (list + [a])     
          @h += 1
          if @h == @max_h
             return
          end
       else
          l = (list + [a]).clone
          find_list(l, index + 1)      
       end  
   }
end  

p get_new_arg(@test)


简单的测试下没问题,不过超级没看懂……
仔细研究研究
回复 支持 反对

使用道具 举报

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

14
发表于 2008-3-30 07:02:34 | 只看该作者
简单的测试下没问题,不过超级没看懂……
仔细研究研究


从后至前,逆循环。

至于如何提出size == 1的组合,就不用赘述了吧。
纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

15
发表于 2008-3-30 07:06:50 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
1
星屑
916
在线时间
101 小时
注册时间
2006-3-27
帖子
1081
16
 楼主| 发表于 2008-3-30 07:08:03 | 只看该作者
其实 << 的功能不是很懂
回复 支持 反对

使用道具 举报

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

17
发表于 2008-3-30 07:11:36 | 只看该作者
以下引用幻の飞鱼于2008-3-29 23:08:03的发言:

其实 << 的功能不是很懂


[本贴由作者于 2008-3-29 23:09:23 最后编辑]


呵呵,确实那里漏了,<<是Array的方法,与Integer移位运算<<方法性质不同,尽管RUBY几乎完全面向对象。
纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
1
星屑
916
在线时间
101 小时
注册时间
2006-3-27
帖子
1081
18
 楼主| 发表于 2008-3-30 07:19:35 | 只看该作者

<< 和直接用 = 的区别在哪??=。=

测试了几次没找出关键
回复 支持 反对

使用道具 举报

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

19
发表于 2008-3-30 10:27:10 | 只看该作者
以下引用幻の飞鱼于2008-3-29 23:19:35的发言:


<< 和直接用 = 的区别在哪??=。=

测试了几次没找出关键


<<对于Array对象来说类似于push,顺路美化代码

@test = [[6,7,8,5],[2,3,5],[5,7,9,8,7]]

def get_new_arg(arg)
   @arg = arg
   @max = @arg.size - 1
   @max_h = @arg.last.size - 1
   @new_arg = Array.new
   
   find_list([], 0)
   
   return @new_arg
end  

def find_list(list, index)  
   @h = 0
   @arg[index].each{|a|
       if index == @max
          @new_arg << (list + [a])     
          @h += 1
          return if @h > @max_h
       end
       find_list(list + [a], index + 1)        
   }
end  

p get_new_arg(@test)
.

纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

20
发表于 2008-3-30 18:41:51 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-8-8 13:52

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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