Я ищу встроенную структуру данных Java, которая лучше всего подходила бы для обработки соседних комнат. У меня есть сетка / пол, разделенные на случайно сгенерированные комнаты, например:

 + + + + + + + + + + + + + + + + + + + +
 +                         +           +
 +                         +           +
 +                         +           +
 +                         +           +
 +                         +           +
 +                         +           +
 +                         +           +
 + + + + + + + + + + + + + + + + + + + +
 +         +         +                 +
 +         +         +                 +
 +         +         +                 +
 +         +         +                 +
 +         +         +                 +
 + + + + + + + + + + + + + + + + + + + +
 +         +             +             +
 +         +             +             +
 +         +             +             +
 +         +             +             +
 + + + + + + + + + + + + + + + + + + + +

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

Есть ли у кого-нибудь предложения?

Благодарность

0
thepandaatemyface 10 Мар 2010 в 01:43
Комнаты гарантированно прямоугольные? Стены всегда выровнены по оси x / y?
 – 
polygenelubricants
10 Мар 2010 в 02:42

2 ответа

Лучший ответ

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

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

В Java граф можно представить с помощью Map<Room,List<Room>>. По сути, это то, что он говорит: это отображение из Room в список его соседних Room s.

В качестве альтернативы, если вы предпочитаете работать с основными целыми числами и массивами, вы можете использовать представление матрицы смежности boolean[][] adj, где adj[i][j] == true тогда и только тогда, когда комната i и комната j являются соседи.

1
polygenelubricants 10 Мар 2010 в 02:02

Вам просто нужно хранить:

  1. противоположные углы каждой комнаты
  2. граф / матрица смежности графа, образованного комнатами как узлами и смежностью как ребром.
2
amit kumar 10 Мар 2010 в 01:52