c++ - 随机生成数组中固定范围的数字,该二维数组中没有重复的行

标签 c++ random

您好,我正在研究生成二维数组中没有重复行的随机数的问题。

我以这种方式接近我使用随机洗牌来做到这一点,代码是

    #include <stdlib.h>
    #include <time.h>
    #include<iostream>

    using namespace std;

    int main ( void )
    {
        srand ( time(NULL) );
        int nsize = 4;
        int seq[nsize];
        int i;

        /* Initialize seq to an ordered range */
        for ( i = 0; i <nsize; i++ )
        {
            seq[i] = i+1;
        }
        cout<<"ele in initial array:";
        for(int j=0;j<nsize;j++)
            cout<<seq[j]<<" ";
        cout<<endl;
        int **array = new int *[nsize * 5];
        for(int i=0;i<nsize*5;i++)
            array[i] = new int[nsize];

        /* Random shuffle */
        int k;

        for(k=0;k<20;k++)
        {
            //srand ( time(NULL) );
            for ( i = nsize-1; i >0; i-- ) {
                //srand ( time(NULL) );
                int r = ( rand() % (nsize - 1 ));
                //srand ( time(NULL) );
                int save = seq[i];
                seq[i] = seq[r];
                seq[r] = save;
            }

            for ( i = 0; i < nsize; i++ )
            {
                array[k][i] = seq[i];
            }


            for(int i=0;i<20;i++)
            {
                for(int j=0;j<nsize;j++)
                {
                    cout<<array[i][j]<<" ";
                }
                cout<<endl;
            } 
            return 0;
        }
    }

但问题是它生成了相同的行 例如:

    2 4 3 1
    1 4 3 2 
    1 3 2 4 
    2 4 3 1 
    2 1 4 3

有没有更好的方法来消除重复行并在二维数组中生成唯一行。 谢谢大家的帮助

最佳答案

看起来你需要 24 行中 1-4 的所有可能排列,你需要一种方法来使用一些临时矩阵跟踪你的前一行

一个简单的方法是这样的:-

size_t k=0;
std::sort(arr, arr+nsize);
do {
    for(int i=0;i<nsize;i++)
     array[k][i] = arr[i];
     k++;
} while(std::next_permutation(arr, arr+nsize));

参见 HERE

关于c++ - 随机生成数组中固定范围的数字,该二维数组中没有重复的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19164994/

相关文章:

python - Python中的随机噪声函数

testing - 确定随机数测试的测试统计量和分布

python:为多个问题导入随机数

c++ - 如何为成员创建 shared_ptr?

c++ - 来自 Base Ctor 的纯虚函数调用

c++ - 重载 operator= 在类之间交换数据

c++ - 在C++中生成随机非重复数数组

C++ 模板参数推导不起作用

c++ - GTKmm - 如何将 pixbuf 放入 TreeView 中

mysql - 如何在MySQL中生成以出生日期开始的数字序列