Хорошо, так вот контекст.Я уже почти целый день работаю над легендарной проблемой из 8 головоломок.У меня отключена эвристика и отключен алгоритм A_star.Спецификация проекта требует от нас решения, используя три различных эвристических значения.Я могу решить ее для любого из трех по отдельности, но когда я решаю их последовательно, я получаю смешную петлю, и она никогда не находит правильное состояние преемника.
Я полагаю моя проблема с моими указателями.У меня есть класс State, как определено ниже, который имеет массив int ** и указатель на State (его родитель).
EDIT: мне нужно использовать int **, как определено в спецификации проекта,в противном случае я бы с удовольствием использовал указатель.
State (int **bd, State* prnt);
State (const State& other);
~State ();
Затем я объявляю их так:
State::State(int **bd, State* prnt) {
// allocate the board
board = new int*[3];
for (int i = 0; i < 3; i++) {
board[i] = new int[3];
}
// fill in the board
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
board[i][j] = bd[i][j];
//board[i][j] =
}
}
// set the parent
parent = prnt;
}
State::State(const State& other) {
// allocate the board
board = new int*[3];
for (int i = 0; i < 3; i++) {
board[i] = new int[3];
State::~State() {
//std::cout << "Deconstructing " << this << endl;
for (int i = 0; i < 3; i++)
delete board[i];
delete [] board;
delete parent;
parent = other.parent;
}
State::~State() {
//std::cout << "Deconstructing " << this << endl;
for (int i = 0; i < 3; i++)
delete board[i];
delete [] board;
delete parent;
}
State& State::operator=(const State &rhs) {
if (&rhs == this) {
return *this;
}
for (int i = 0; i < 3; i++) {
delete board[i];
}
delete [] board;
// allocate the board
board = new int*[3];
for (int i = 0; i < 3; i++) {
board[i] = new int[3];
}
// fill in the board
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
//board[i][j] = rhs.board[i][j];
board[i][j] = rhs.getIntAtCoor(j, i);
}
}
//delete parent;
// set the parent
parent = rhs.parent;
// set g
g = rhs.g;
f = rhs.f;
hType = rhs.hType;
return *this;
}
Я не даю точных объявлений - некоторые из них просто, как int = int.Я просто не могу понять это.Я чувствую, что либо delete parent неверен, либо мой parent = other.parent неверен (или оба).
Спасибо за ваше время и помощь,
Тайлер