Алгоритм размещения головоломок по спирали
Я пишу алгоритм для головоломки. Я ставлю головоломки по спирали следующим образом:
[07][08][09][10]
[06][01][02][11]
[05][04][03][12]
[16][15][14][13]
пример
- загадка на месте [02] должна соответствовать ее западному краю, чтобы загадать [01] восточный край;
- загадка на месте [06] должна соответствовать ее восточному краю, чтобы загадывать [01] западный край; и его южный край должен соответствовать загадке [05] северного края.
У меня будет непредсказуемое количество головоломок, из которых я всегда буду пытаться сформировать самый большой квадрат.
Я создал следующий класс и функцию
class Tile
{
private int north;
private int east;
private int south;
private int west;
}
bool checkFit(Tile t, Tile[] R, int pos)
{
if (pos == 0)
return true;
return false;
}
}
В проверке я буду проверять, могу ли я поставить головоломку как следующий элемент моего массива. Он получает плитку, которую я пытаюсь поместить, массив, заполненный плитками до текущей позиции, которую я хочу заполнить, и первую пустую позицию (последняя не понадобится, так как я проверю первый нулевой элемент в массиве R, это только скелет функции сейчас).
Проблема в том, что я не могу понять алгоритм проверки для n плитки, если она соответствует (n-1) краю плитки (и какой?) И есть ли другая плитка для проверки.
1 ответ
Проблема в том, что я не могу понять алгоритм проверки для n плитки, если она соответствует (n-1) краю плитки (и какой?) И есть ли другая плитка для проверки.
Причина, по которой у вас возникают проблемы, связанные с вашим решением, заключается в том, что ваш прототип не решит проблему.
Вы должны следить за строкой и столбцом плитки, которая все. Я предполагаю, что переменные являются правильными?
Таким образом, плитка 07 будет смежной с 06 16 08 и 10 правильной?
Если это так, то алгоритм чрезвычайно прост. Вам нужен зазубренный массив для одной вещи.