0

3D 配列を作成し、1 ~ 9 を 3x3x3 ボックスに配置するこのコードがあります。この配列の要素をシャッフルして、新しくシャッフルされた配列が魔方陣にどれほど近いかを比較する方法を見つける必要があります。どんなアイデアでも大歓迎です!ありがとう!

 for(i = 0; i < x; i++)
{
    cout << "Finding a Magic Square..." << endl;

    for(j = 0; j < y; j++)
    {
        cout << endl;

        for(k = 0; k < z; k++)
        {
            array3D[i][j][k] = (i+1) + (j * z) + k;
            cout << '\t' << array3D[i][j][k];
        }
    }

    cout << endl << endl;
}
4

2 に答える 2

0

使用できますstd::random_shuffle(...)が、真にランダムな順列を得るには適切に使用する必要があります。2D 配列で random_shuffle を繰り返し使用すると、行ごとに関連するエントリが生成されます。

#include <algorithm>
#include <iterator>
#include <iostream>
#include <cstdlib>
#include <ctime>

int main () {
    std::srand(std::time(NULL)); // initialize random seed

    // shuffle a 2D array
    int arr[3][3] = {
        {0, 1, 2},
        {3, 4, 5},
        {6, 7, 8}
    };

    // Shuffle from the first member to the last member.
    // The array is interpreted as a 9 element 1D array.
    std::random_shuffle(&arr[0][0], &arr[2][3]);

    // print the result
    for (int row = 0; row < 3; ++row) {
        for (int col = 0; col < 3; ++col) {
            std::cout << arr[row][col] << ' ';
        }
        std::cout << std::endl;
    }
    return 0;
}

オンラインデモ: http://ideone.com/C4PlRs

于 2013-03-23T17:08:29.350 に答える
-1

std::random_shuffle配列をシャッフルするために使用できます。

于 2013-03-23T16:19:26.273 に答える