магический квадрат — перетасуйте трехмерный массив в Переполнение стека

У меня есть этот кусок кода, который создает 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;
}

0

Решение

Ты можешь использовать std::random_shuffle(...) но вы должны использовать его правильно, чтобы иметь действительно случайные перестановки.
Итеративное использование 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

0

Другие решения

ты можешь использовать std::random_shuffle перетасовать массив.

-1

По вопросам рекламы [email protected]