深度搜索( 数子排序)

计算纸牌在全部使用且不重复使用的情况下,有几种排序方式

// 纸牌数组(三张纸牌,未使用标记为0, 可以根据数组中的位置,理解为1,2,3)
self.cardArr = [@[@"0",@"0",@"0"] mutableCopy];
// 盒子数组 (最开始是空盒子)
self.boxArr = [@[@"",@"",@""] mutableCopy];

- (void)depthSearchWithNumber:(NSInteger)current {
    // 当前盒子大于纸牌数的时候结束(数组索引从0开始,索引等同于个数的时候就是超出了)
    if (current == self.cardArr.count) {
        // 遍历输入当前盒子中的纸牌数
        for (NSInteger i = 0; i < self.count; i ++) {
            // 输出这组数子(由于从0开始的, 加1等同于从1开始)
            NSLog(@"%d",[self.boxArr[i] intValue] + 1);
        }
        return;
    }
    // 遍历所有纸牌
    for (NSInteger i = 0; i < self.cardArr.count;  i++) {
        // 判断当前纸牌是否使用过
        if ([self.cardArr[i] isEqualToString:@"0"]) {
            // 把未使用的纸牌放进当前盒子中
            self.boxArr[current] = [NSString stringWithFormat:@"%ld",i];
            // 把放进盒子中的纸牌标记为已使用过
            self.cardArr[i] = @"1";
            // 进行下一个盒子的操作
            [self depthSearchWithNumber:current + 1];
            // 把刚刚使用过
            self.cardArr[i] = @"0";
        }
    }
}

你可能感兴趣的:(深度搜索( 数子排序))