我正在玩一款拥有武器锻造组件的游戏,你可以将两种武器结合起来获得新武器.武器组合的绝对数量(参见http://www.gamefaqs.com/ps/914326-vagrant-story/faqs/8485上的 "6.1.刀片组合表" )很难弄清楚你最终可以创造出什么通过反复锻造你当前的武器,所以我尝试编写一个程序来为我做这个.我给它一份我目前拥有的武器清单,例如:
它给了我所有可以伪造的武器清单:
问题是我使用的蛮力算法扩展得非常差; 计算7种起始武器的所有可能武器需要大约15秒,而计算8种起始武器需要几分钟.我希望它能够计算多达64种武器(你可以同时拥有的最大值),但我认为我没有足够长的时间看到结果.
function find_possible_weapons(source_weapons)
{
for (i in source_weapons)
{
for (j in source_weapons)
{
if (i != j)
{
result_weapon = combine_weapons(source_weapons[i], source_weapons[j]);
new_weapons = array();
new_weapons.add(result_weapon);
for (k in source_weapons)
{
if (k != i && k != j)
new_weapons.add(source_weapons[k]);
}
find_possible_weapons(new_weapons);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
用英语:我从源武器列表中尝试两种武器的组合.对于这些组合中的每一个,我创建了一个新的列表,列出了我在该组合之后所拥有的所有武器(也就是说,新组合的武器加上除了我合并的两个以外的所有武器),然后我重复这些新列表的步骤.
有一个更好的方法吗?
请注意,以相反顺序组合武器可以改变结果(Rapier + Firangi =短剑,但Firangi + Rapier = Spatha),所以我不能跳过j循环中的那些反转.
编辑:这是我上面给出的测试示例的细分,以显示算法正在做什么.括号中的一行显示组合的结果,以下行是作为结果创建的新武器列表:
francisca,tabarzin,kris
[francisca + tabarzin …Run Code Online (Sandbox Code Playgroud)