我正在写一个递归的数独求解器,我遇到了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数组的引用方面存在一些问题,但我无法弄明白。任何帮助都很棒。