首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c++中混洗3d数组

在c++中混洗3d数组
EN

Stack Overflow用户
提问于 2013-03-24 00:17:48
回答 2查看 419关注 0票数 0

我有这段代码,它创建了一个3d数组,并将1-9放在一个3x3x3的框中。我需要找到一种方法来打乱这个数组的元素,以比较新打乱的数组与魔方的接近程度。任何想法都很受欢迎!谢谢!

代码语言:javascript
复制
 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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-24 01:08:29

您可以使用std::random_shuffle(...),但您必须正确使用它才能获得真正的随机排列。在二维数组上迭代使用random_shuffle将在每行产生相关条目。

代码语言:javascript
复制
#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

票数 0
EN

Stack Overflow用户

发布于 2013-03-24 00:19:26

您可以使用std::random_shuffle对数组进行混洗。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15589044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档