随机唯一数字数组比较C ++

时间:2015-04-11 17:10:19

标签: c++ arrays random 2d

我有两个类型为整数的二维数组。我将随机值分配给这两个数组。第一列中的值表示a和b的x值,第二列中的值表示a和b的y值。

声明数组

int ROW(12), COLUMN(2);
int a[ROW][COLUMN];
int b[ROW][COLUMN];

将随机值分配给数组

    for (int i(0); i < ROW; i++)
    {
        a[i][0] = Random(SIZEX - 2);    //horizontal coordinate in range [1..(SIZEX - 2)]
        a[i][1] = Random(SIZEY - 2);    //vertical coordinate in range [1..(SIZEY - 2)]
    }

    for (int i(0); i < (ROW - 4); i++)
    {
        b[i][0] = Random(SIZEX - 2);    //horizontal coordinate in range [1..(SIZEX - 2)]
        b[i][1] = Random(SIZEY - 2);    //vertical coordinate in range [1..(SIZEY - 2)]
    }

我需要找到一种方法,我可以比较行的x和y值,每个数组中每个其他行的x和y值以及另一个数组,并确保x和x的每个组合y对于两个数组都是唯一的。

因为坐标与另一个数组中的位置有关。

我有一个非常混乱的解决方案,适用于其中一个阵列。

for (int i(0); i < COLUMN; ++i)
{
    if (i == 0)
    {
        while (b[i][0] == spot.x)
            b[i][0] = Random(SIZEX - 2);
    }

    if (i == 1)
    {
        while ((b[i][0] == spot.x) || (b[i][0] == b[i - 1][0]))
            b[i][0] = Random(SIZEX - 2);
    }

    if (i == 2)
    {
        while ((b[i][0] == spot.x) || (b[i][0] == b[i - 2][0]) || (b[i][0] == b[i - 1][0]))
            b[i][0] = Random(SIZEX - 2);
    }

    if (i == 3)
    {
        while ((b[i][0] == spot.x) || (b[i][0] == b[i - 3][0]) || (b[i][0] == b[i - 2][0]) || (b[i][0] == b[i - 1][0]))
            b[i][0] = Random(SIZEX - 2);
    }

    if (i == 4)
    {
        while ((b[i][0] == spot.x) || (b[i][0] == b[i - 4][0]) || (b[i][0] == b[i - 3][0]) || (b[i][0] == b[i - 2][0])
            || (b[i][0] == b[i - 1][0]))
            b[i][0] = Random(SIZEX - 2);
    }

    if (i == 5)
    {
        while ((b[i][0] == spot.x) || (b[i][0] == b[i - 5][0]) || (b[i][0] == b[i - 4][0]) || (b[i][0] == b[i - 3][0])
            || (b[i][0] == b[i - 2][0]) || (b[i][0] == b[i - 1][0]))
            b[i][0] = Random(SIZEX - 2);
    }

    if (i == 6)
    {
        while ((b[i][0] == spot.x) || (b[i][0] == b[i - 6][0]) || (b[i][0] == b[i - 5][0]) || (b[i][0] == b[i - 4][0])
            || (b[i][0] == b[i - 3][0]) || (b[i][0] == b[i - 2][0]) || (b[i][0] == b[i - 1][0]))
            b[i][0] = Random(SIZEX - 2);
    }

    if (i == 7)
    {
        while ((b[i][0] == spot.x) || (b[i][0] == b[i - 7][0]) || (b[i][0] == b[i - 6][0]) || (b[i][0] == b[i - 5][0])
            || (b[i][0] == b[i - 4][0]) || (b[i][0] == b[i - 3][0]) || (b[i][0] == b[i - 2][0]) 
            || (b[i][0] == b[i - 1][0]))
            b[i][0] = Random(SIZEX - 2);
    }
}

但它只比较x(第一列)。 spot表示结构变量。

1 个答案:

答案 0 :(得分:0)

可能你可以试试

for (int i=0;i<12;i++)
{for (int k=i+1;k<12;k++)
 {if (a[i][0]==a[k][0])
 cout<<"a["<<i<<"][0] same as a["<<k<<"][0]"<<endl;//you can assign a new number to a[k][0]
}};