Хранение слов кроссворда (поперек и вниз)?

Если я создаю кроссворд, я бы хотел, например, сохранить заполненные слова в сетке 9 на 9. Я рассмотрел массив 2d, но могу хранить только слова Across, а не слова Down. Даже если каждое слово хранится как объект (указывающий направление), я не буду знать, какие слова пересекаются с какими словами. Может ли кто-нибудь указать мне в правильном направлении?


person kookie    schedule 28.02.2013    source источник
comment
Вам не нужно беспокоиться о том, где слова пересекаются. См. ответ @Valentinas.   -  person Lee Taylor    schedule 28.02.2013
comment
В случае, если кто-то еще заинтересуется этим вопросом, я бы посоветовал вам сначала подумать об алгоритмах, которые вы хотите запустить в структуре данных, затем выбрать подходящий (эффективный, простой в управлении, отражающий требуемые операции). ) структура данных.   -  person Adrian Mouat    schedule 09.10.2013


Ответы (3)


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

{'starfish':{'direction':'horizontal','position':[0,4]}, 'ratchet':{'direction':'vertical', 'position':[0,8]}
person RonnyKnoxville    schedule 28.02.2013

Сохраните направление (вверх/вниз/влево/вправо) и начальные координаты.

e.g.

 First
    e
    c
    o
    n
third

первый будет помещен слева на 1,0; второй будет вниз на 5,0; третья слева 0,6.

Вы также можете сохранить символы в массиве 2d, этот конкретный пример:

[
  [null, 'f','i', 'r', 's', 't'],
  [null, null, null, null, 'e', null ],
  [null, null, null, null, 'c', null ],
  [null, null, null, null, 'o', null ],
  [null, null, null, null, 'n', null ],
  ['t', 'h', 'i', 'r', 'd', null ]
]

Первый способ сохранения дает вам преимущества наличия слов и знания их начальных точек, но он не заставляет его придерживаться формата кроссворда (например, трудно понять, какие символы должны быть одинаковыми и т. д.). Второй способ усиливает это, но труднее разобрать слова. Может быть, объединить два?

person valentinas    schedule 28.02.2013

Интересная проблема. Ради интереса я бы начал здесь:

class CrosswordItem
{
    int startX;
    int startY;
    string word;
}

Удачи с вашей проблемой!

person Mike C.    schedule 28.02.2013