Вопрос

Я реализую BFS, и он собирается пройти через упорядоченное дерево, чтобы найти кратчайшее решение головоломки.

То, что я буду делать, - это создание объекта Snapshot, в котором хранится текущая позиция каждой части головоломки. Я добавлю этот объект Snapshot в очередь и проверю, является ли это решением. Тем не менее, я создаю эти снимки на лету. Так есть ли какой-нибудь способ, который автоматически генерирует имена объектов Snapshot, когда они помещаются в очередь?

или я должен следить за тем, сколько объявлений я сделал, и просто жестко закодировать это, сказав ...

Снимок снимка 2; Снимок снимок3; Снимок снимок4; и т.д ..

Это было полезно?

Решение

Есть способ - вы используете токен препроцессора Оператор вставки . Это позволяет вам создать имя на основе переменной, поэтому вы должны указать:

#define S(variable) snapshot#variable

и вы сможете создавать переменные с именами snapshot1, snapshot2 и т. д.

Snapshot S(1)
Snapshot S(2)

Однако я не уверен, что это то, чего вы действительно хотите, возможно, я однажды использовал эту технику на практике, и это было для генератора кода.

Другие советы

Я думаю, вы спрашиваете, как вы создаете и храните много объектов, когда не знаете, сколько их будет.

Вам нужно создать массив объектов. Затем вы можете получить к ним доступ как снимок [1], снимок [2] ... снимок [i].

Вы можете использовать очередь из стандартной библиотеки шаблонов, а затем создать функцию, которая создает объект Snapshot и помещает его в очередь. Присвойте этой функции статическую переменную, которая увеличивается каждый раз, когда она вызывается и записывается в поле id снимка.

http://www.csci.csusb.edu/dick/samples /stl.html

http://www.cppreference.com/wiki/stl/queue/start

Я думаю, нам нужно больше информации для этого. Если вы просто выводите их из очереди, почему вас волнует, как они называются? Объекты в очереди обычно не нумеруются, если вы не реализуете их в массиве.

Извините, но вся эта очередь вызывает ненужное замешательство.

Давайте рассмотрим другой пример. Таким образом, для этой головоломки, количество частей в головоломке определяется пользователем. Я создаю программу так, что каждый кусочек головоломки - это отдельный объект.

Поэтому, когда я приступаю к созданию этих пьес, могу ли я использовать какие-то схемы именования переменных для обозначения этих пьес. так как то просто в качестве примера ...

for (int i-0; i < constraint; i++)
Piece "Piece"+i = new Piece();

Вы не можете динамически создавать имена переменных в C ++, по крайней мере без некоторого (воображаемого?) дополнения.

edit: Помимо этого, я выполнил задание, которое, как я полагаю, похоже на ваше в классе AI, где мы рассмотрели основы, такие как BFS, DFS и A *. Ни разу не было необходимости иметь объекты с уникальными именами для " снимков " ;, и я использовал очереди.

edit2: и если вам нужно отслеживать, сколько у вас снимков, создайте переменную count, которая будет увеличиваться при каждом создании объекта.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top