数独函数返回相同板的数组

时间:2013-12-20 01:56:39

标签: objective-c nsmutablearray multidimensional-array sudoku

我正在写一个递归的数独求解器,我遇到了2D数组处理的一些问题。我包括了给麻烦的功能。我在那里使用了一些不必要的行进行调试。

- (Stack *)successors
{
    Stack *stack = [[Stack alloc] init];
    NSMutableArray *temp = [[NSMutableArray alloc] init];
    NSMutableArray *test = [[NSMutableArray alloc] init];
    temp = [self.board copy];
    for (int x = 0; x < columns; x++) {
        for (int y = 0; y < rows; y++) {
            if ([self.board[x][y] isEqualToString:@""] ||
                [self.board[x][y] isEqualToString:@"."]) {

                NSLog(@"%d %d", x, y);

                for (int i = 1; i < 10; i++) {
                    NSLog(@"%d", i);
                    [temp[x] setObject:[NSString stringWithFormat:@"%d", i] atIndex:y];
                    State *tempState = [[State alloc] initWithBoard:temp];
                    if ([tempState legal]) {
                        NSMutableArray *input = [NSMutableArray arrayWithArray:temp];
                        [stack push:input];
                        [stack push:input];
                        [test addObject:input];
                    }
                }
                NSLog(@"test %@", test);
                int p = [stack size];
                for (int i = 0; i < p; i++) {
                    NSLog(@"%@", [stack pop]);
                }
                return stack;
            }
        }
    }
    return stack;
}

本质上,它从数组的顶部开始,如果空格为空,它会尝试输入数字1到9,如果它是合法的,基于我之前写的另一个函数,它会在temp中输入它数组并将其添加到堆栈中。我查了一遍,效果很好。然而,在将它们全部加在一起之后,我NSLog检查堆栈并发现所有堆叠的阵列现在都以数字9开头,即临时数组中检查的最后一个数字。我相信我在保持对temp数组的引用方面存在一些问题,但我无法弄明白。任何帮助都很棒。

0 个答案:

没有答案