-(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
ます(構造体を使用しますが、テストの範囲ではCGPointを使用します..基本的に同じことです)、そのポイントについて私はそれが最初の行にあるかどうかを確認し、そうでない場合は、値が上の行の値と等しいかどうかを確認します。そうである場合は、ポイントの座標を配列に追加し、上の値に移動します(再帰的に)。左、右、下にもifがありますが、考え方は同じです。
私の問題:
- 何らかの理由で、値が 1 でいっぱいのマットでも、正常に機能しません
- ポイントを格納するために使用する NSMutableArray は常に null です (NSLog が呼び出されるので、既にオブジェクトが追加されているはずです)。
- 再帰性はメソッドで機能しますか?
- これを行う方法についてより良いアイデアがあれば...私は聞いています