-(BOOL)isInArray:(CGPoint)point{
if ([valid count]==0) {
return NO;
}
for (NSValue *value in valid) {
CGPoint er=[value CGPointValue];
if( CGPointEqualToPoint(point,er)) return NO;
}
return YES;
}
-(void)check:(CGPoint)next{
if (!next.y==0) {
int ics=(int) next.x;
int igrec=(int)next.y;
if (mat[ics][igrec]==mat[ics-1][igrec]){
if (![self isInArray:next]) {
[valid addObject:[NSValue valueWithCGPoint:next]];
NSLog(@"valid y!=0 : %@",valid);
[self check:CGPointMake(ics-1, igrec)];
}
}
}
}
y 是列,x 是行,mat 是 C 矩阵
我在这里尝试做的是:我next
在矩阵中得到一个点, mat
(我将使用 struct,但对于测试范围,我使用 CGPoint ..它基本上是同一件事),对于这一点,我检查它是否在第一行,如果不是,我检查值是否等于上面行的值。如果是,我将点的坐标添加到数组中并移动到上面的值(递归)。我也有左、右和下方的 ifs ......但想法是一样的。
我的问题:
- 出于某种原因,它不能正常工作,即使垫子上满是 1 值
- 我用来存储点的 NSMutableArray 始终为空(请注意,NSLog 被调用,因此它应该已经添加了一个对象)
- 递归是否适用于方法?
- 如果你有更好的想法如何做到这一点......我在听