Как мне решить эту игру жизни задание на C++
Я пытаюсь закодировать этот вопрос, но на самом деле не уверен, как это сделать, если кто-то может предложить какое-либо представление о том, как это можно закодировать, дайте мне знать.
2. game_of_life
Что такое игра жизни?
Не путать с "игрой жизни" Хасбро, эта проблема относится к знаменитой клеточной автоматизации британского математика Джона Конвея. Термин "клеточная автоматизация" относится к пространству (в данном случае к сетке) ячеек, которые непрерывно трансформируются для создания новых моделей и состояний, основанных на состояниях соседних ячеек, следуя дискретному набору математических правил. Имитационные модели клеток, живущих, умирающих и размножающихся в течение нескольких поколений.
правила
Любая живая клетка, имеющая менее двух живых соседей, умирает (как будто из-за недостаточной заселенности).
Любая живая клетка с более чем тремя живыми соседями умирает (как будто от перенаселения/перенаселенности).
Любая живая клетка с двумя или тремя живыми соседями живет, не меняясь, до следующего поколения.
Любая мертвая клетка с ровно тремя живыми соседями оживет (как бы при реанимации или рождении).
Соседи относятся к восьми ячейкам, смежным с любой заданной ячейкой в сетке, за исключением граничных ячеек.
назначение
Для этого задания мы просим вас реализовать игру жизни Конвея, используя двумерный массив в качестве сетки, в которой будут храниться ячейки. Живые клетки обозначаются символами*, мертвые-символами the . характер.
Ввод
В качестве входных данных вам будет дана строка, содержащая количество строк, количество столбцов и количество поколений для моделирования в виде m n g, за которой следуют m строк, содержащих начальное состояние сетки. 3 <= m,n <= 20 и 0 <= g <= 50
Например, сетка 4 х 5, на которой должны быть смоделированы 7 поколений жизни, будет дана следующим образом:
4 5 7
. * * . .
. * . . .
* * * . *
. . . . *
Вы должны хранить это начальное состояние сетки в многомерном массиве, как описано в классе.
ваша задача
Начальное состояние (поколение 0) хранится в сетке.
. * * . .
. * . . .
* * * . *
. . . . *
Затем вы должны вычислить следующее поколение (поколение 1), применив правила к сетке предыдущего поколения (в данном случае поколение 0).
Состояние сетки после вычисления поколения 1 должно быть следующим:
. * * . .
. . . * .
* * * * .
. * . * .
Важное примечание: "[поколение n] создается путем одновременного применения правил [...] к каждой клетке в [поколении n-1] — рождение и смерть происходят одновременно" (Википедия). Это означает, что при применении правил к n-1 для вычисления/создания n вы не должны ни в коем случае изменять значения в n-1, а только соблюдать их. Только после того, как n было засеяно, вы должны изменить n-1.
Повторите описанный выше процесс g раз, пока ваша сетка не будет в своем окончательном состоянии. Это означает, что если вы получаете g = 0, ваше начальное и конечное состояние будут одинаковыми.
Выход
Ваш вывод должен быть конечным состоянием сетки после того, как g generations будет напечатан в std::cout в приведенном выше формате.
Примечание: ваша печатная сетка не должна содержать конечных пробелов в конце каждой строки.
Что я уже пробовал:
Я не уверен, с чего начать кодирование этой проблемы, поэтому любая помощь будет оценена по достоинству.
Richard MacCutchan
Во многом та же проблема, что и ваш скользящий вопрос-головоломка.