我有一个3乘3的拼图。要知道它是否可以解,我需要计算逆序对的数量。如果逆序对的数量是偶数,那么它是可以解的。我在网上找到了一段示例代码:
他提到 { 1, 0, 3, 7, 2, 5, 8, 4, 6 } 是可解的。但我的计算结果却不同。我有 (10,32,72,75,74,76,54,84,86)。因此,在这种情况下逆序对的数量是9,这是一个奇数,所以不可解。
我用代码测试了另一个案例 (3,0,7,6,8,2,1,4,5)。它给我了 (30,31,32,62,61,64,65,76,72,71,74,75,82,81,84,85,21),即17个逆序对。所以它是不可解的,但代码却说它是可解的。
我是否犯了什么错误?还是代码中有错误?
回答:
你的方法略有错误。假设0是空白方块,你在计算逆序对时应该忽略它。
做出这一改变后,你的两个例子中都会少算一个逆序对,所以两者都是错误的。