-(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)];
}
}
}
}рекурсии в методах, алгоритм и NSValue вопрос
у являются столбцы, х являются строки, мат представляет собой матрицу C
то, что я пытаюсь сделать здесь заключается в следующем: я получаю point, next
, в матрице, mat
(я буду использовать struct, но для области тестирования я использую CGPoint ... это то же самое), и для этого я проверяю, находится ли он в первой строке, и если это не i проверьте, соответствует ли значение значению строки выше. Если это так, я добавляю координату точки в массив и перехожу к значению выше (рекурсивно). У меня есть ifs для левой, правой и ниже тоже ... но идея такая же.
Мои вопросы:
- почему-то не работает, как и должно быть, даже с матом полным 1 значений
- NSMutableArray я использую для хранения точек всегда нуль (заметим, что NSLog получает вызов, поэтому он должен был добавить объект уже)
- Рекурсивно работает с методами?
- Если у вас есть лучшее представление о том, как это сделать ... я слушаю
хорошо..и теперь использую NSSet, перемещал некоторые вещи вокруг ... он работает..Но он не работает так, как должен .. я попытаюсь исправить это, но если он не работает, я поставлю код здесь ... может быть, вы можете мне помочь :) – skytz
, поэтому я пришел к выводу, что он не называет '[self check: CGPointMake (ics-1, igrec)];' ... любые идеи? (или если он делает это ... он не работает рекурсивно) – skytz
казалось, что это была ошибка с моей стороны .. маленькая ... но теперь она отлично работает .. спасибо – skytz