计算NSArray中的倒置

时间:2017-07-23 17:22:28

标签: objective-c algorithm 8-puzzle

我是Objective-C的新手,所以我试图通过实现算法来学习。我正在进行A *搜索以解决8-puzzle问题。在运行算法本身之前,我想检查给定的拼图组合是否可解。我之前用C ++和Swift编写过这段代码,但是对于我来说它在Objective-C中无法正常工作。对于这个数组,它给出了7的反转计数,而它应该是0.也许我应该使用[NSArray objectAtIndex:]方法来访问元素,然后将它们转换为整数进行比较?我已经测试了不同的方法,比较正常。请帮我找一下这个bug。

    NSArray *test = @[@1, @2, @3, @4, @5, @6, @7, @0, @8];
    NSInteger inv_count = 0;

    for (NSInteger i = 0; i < 8; i++) {
        for (NSInteger j = i + 1; j < 9; j++) {
            if (test[j] && test[i] && test[i] > test[j]) {
                inv_count++;
            }
        }
    }

    NSLog(@"inv_count = %ld", (long)inv_count);

    if (inv_count % 2 == 0) {
        NSLog(@"Solvable.");
    } else {
        NSLog(@"Not solvable.");
    }

1 个答案:

答案 0 :(得分:0)

基本上这行代码是错误的:

if(test[j] && test[i] && test[i]>test[j])

test是NSNumber个实例的数组,或者基本上它包含指针。因此,要检查该数组的元素是否等于零或比较它,您应该得到该元素的整数值:

if(((NSNumber*)test[j]).integerValue && ((NSNumber*)test[i]).integerValue && ((NSNumber*)test[i]).integerValue > ((NSNumber*)test[j]).integerValue)

或者,您可以使用- (NSComparisonResult)compare:(NSNumber *)aNumber

NSNumber方法

PS:请检查this for more info