Преобразуйте все числа в ноль, следуя 1 правилу [закрыто]C++

Программы на C++. Форум разработчиков
Anonymous
 Преобразуйте все числа в ноль, следуя 1 правилу [закрыто]

Сообщение Anonymous »

Там 2d массив (матрица) случайным образом заполнен 1 и 0.
Когда вы нажимаете на ячейку, она меняет свое
состояние, и все остальные ячейки в той же строке,
столбце (вдоль X, Y) также меняются.
Цель состоит в том, чтобы написать функцию unlock(), которая будет
гарантировать, что все ячейки в матрице разблокированы.
Единственное, что я нашел на данный момент: если вы щелкаете ячейки в координатах, которые вместе представляют прямоугольник, вы меняете значения ячеек, не влияя на другие ячейки.
Например
0 -- -----> Д

| 1 0 0 1 0

| 0 1 0 1 0

| 1 0 0 1 1

| 1 1 0 1 1

X
0 0 0 0 0

0 1 0 1 0

0 0 0 0 1

1 1 0 1 1
если последовательно щелкать ячейки по координатам (0,0) (0,3) (3, 0 ) (3, 3) он изменит значения и не повлияет на другие значения на той же оси.
Вопрос заключается в том, чтобы найти разумный способ минимизировать количество кликов и ускорить процесс.< /p>
`
#include iostream
#include vector
#include random
#include chrono
#include time.h
class LockMatrix
{
public:

static const uint64_t cube_ax_min_size = 10;
static const uint64_t cube_ax_max_size = 100;
static const uint64_t cube_lock_frq = 3;

LockMatrix();

bool create (uint64_t x, uint64_t y);
void click (uint64_t x, uint64_t y);
void show ();
bool isLock ();

std::vector read();

private:
std::mt19937_64 rng;
std::vector state;
uint64_t x_size = 0, y_size = 0;
};

void LockMatrix::click(uint64_t x, uint64_t y)
{
state[x][y] = !state[x][y];

for (uint64_t xi = 0; xi < x_size; xi++)
{
if (xi == x)
continue;

state[xi][y] = !state[xi][y];
}

for (uint64_t yi = 0; yi < y_size; yi++)
{
if (yi == y)
continue;

state[x][yi] = !state[x][yi];
}

}

bool LockMatrix::isLock()
{
for (uint64_t x = 0; x < x_size; x++)
{
for (uint64_t y = 0; y < y_size; y++)
{
if (state[x][y])
return true;
}
}
return false;
}

std::vector LockMatrix::read()
{
return state;
}

LockMatrix::LockMatrix()
{
// allocate
rng.seed(time(0));
x_size = 10;//(rng() % (cube_ax_max_size - cube_ax_min_size)) + cube_ax_min_size;
y_size = 10;//(rng() % (cube_ax_max_size - cube_ax_min_size)) + cube_ax_min_size;

state.resize(x_size);
for (uint64_t x = 0; x < x_size; x++)
{
state[x].resize(y_size);
}

// lock
for (uint64_t x = 0; x < x_size; x++)
{
for (uint64_t y = 0; y < y_size; y++)
{
if (rng() % cube_lock_frq)
{
click(x, y);
} }
}
}

void LockMatrix::show()
{
std::cout

Подробнее здесь: https://stackoverflow.com/questions/790 ... ing-1-rule

Вернуться в «C++»