1

指定された幅と高さでランダムな迷路を生成する必要があります。Perl では、深さ優先検索アルゴリズムを使用してこれを行うことができます。このアルゴリズムでは、次のような 2D 配列を使用します。

    for my $i (0 .. $h - 1) {
        for my $j (0 .. $w - 1) {
            push @{ $cell[$i] }, '1';
        }
        push @{ $cell[$i] }, '0';
    }
    for my $i (0 .. $w) {
        $cell[$h][$i] = '';
    }

Objective C では、2D 配列はありません。私は今、ちょっと迷っています。Perl とほとんど同じデータ構造を使用できるように、Objective C の 2D 配列に相当するものは何ですか? ありがとう。

4

3 に答える 3

1

One way is to use Objective-C style array:

NSMutableArray *cell = [NSMutableArray arrayWithCapacity:h];
for (int i=0; i<h; ++i) {
    NSMutableArray *row = [NSMutableArray arrayWithCapacity:w];
    for (int j=0; j<w; ++j) {
        // use a random number
        [row addObject:[NSNumber numberWithInt:rand()]];
    }
    // add one row
    [cell addObject:row];
}

Another way is just to use C style array:

int **cell = malloc(h*sizeof(int *));
for (int i=0; i<h; ++i) {
    cell[i] = malloc(w*sizeof(int));
    for (int j=0; j<w; ++j) {
        cell[i][j] = rand();
    }
}

// after you used it remeber to free it
for (int i=0; i<h; ++i) {
    free(cell[i]);
}
free(cell);
cell = NULL;
于 2012-11-25T06:51:18.880 に答える
0

2次元配列またはN次元配列は、データを格納する方法に他なりません。2次元配列が必要な場合は、そのかなり単純ですが、obj-cで少し注意が必要な場合は、第2レベルの配列を作成してから、それを第1レベルに挿入する必要があります。

以下のコードを参照してください:

NSMutableArray *twoDArray = [NSMutableArray new]; //this is first level

//below are second level arrays inserted in index 0 to 2.
[twoDArray insertObject:[NSMutableArray arrayWithObjects:@"00",@"01",@"02",nil] atIndex:0];
[twoDArray insertObject:[NSMutableArray arrayWithObjects:@"10",@"11",@"12",nil] atIndex:1];
[twoDArray insertObject:[NSMutableArray arrayWithObjects:@"20",@"21",@"22",nil] atIndex:2];
于 2012-11-25T06:42:20.773 に答える