Java中的方法执行顺序排序

时间:2015-09-10 20:58:38

标签: java algorithm sorting annotations

我已经在这个问题上坚持了很长时间,并且无法在网络上的任何其他地方找到帮助,所以这可能对以后的其他人有用。

我有一个单词列表,列表中的每个单词都有自己的前后两个单词数组。

以下是一个例子:

"forest" - before:{"tree"}
"frog" - after:{"mushroom"}
"mushroom"
"leaf" - after:{"mushroom"}, before: {"frog"}
"tree" - before:{"mushroom"}

这些词应按以下顺序排列:森林,树木,蘑菇,叶子,青蛙。所以基本上,“之后”并不意味着一个词需要紧接着另一个词(也不是“之前”),它只是不能在所述词之前(或在“之前”之后)之后。

我试图通过使用数组列表并在自定义索引处添加元素来解决此问题,只要插入像“leaf”这样的元素(在两个其他元素之间的元素)就会中断。

这个例子已被简化,所以它不会让任何人感到困惑,我实际上是在编写一个mod加载器,它对注释说明它们应该在之后/之后执行哪些mod的方法进行排序。

编辑: 我设法通过在之前转换到数组之前包含的元素来解决问题。

之后,我所做的只是遍历所有元素,然后检查该元素是否已经执行(你会在一秒钟内看到原因),如果没有执行,先以同样的方式执行所有后面的元素然后执行实际元素。我也做了一些检查以防止循环等。

2 个答案:

答案 0 :(得分:1)

我不会为你编写代码,但我会概述一些关于算法的提示。

首先要意识到的是after信息中没有任何意义,因为B之后AA相同B } after之前。首先将所有before信息替换为等效的before信息。

接下来,您必须意识到,如果某个项目位于其中一个before数组中,则无法首先执行此操作。所以你要做的就是浏览所有before数组,找不到任何一个元素。如果这些数组中没有元素,则该元素可以先行。 (如果没有,问题就不可能了。)

一旦您确定哪个元素首先出现,请丢弃其Sub ClearTintAndShade() On Error GoTo 1 Application.CutCopyMode = False With ThisWorkbook.Sheets("Outputs 2").Range("B19:M24").Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With Exit Sub 1: MsgBox ("That sheet does not exist!") End Sub 数组并使用递归完成列表。

答案 1 :(得分:0)

这是Topological Sort问题的一个实例。

方法的名称可以被视为图中的节点,并且“之前”和“之后”关系是所述图中的有向边。