Поиск в ширину в Java - PullRequest
       120

Поиск в ширину в Java

2 голосов
/ 28 января 2009

Мне нужно выполнить поиск в ширину в Java для назначения. У меня есть сетка плиток 5х5 (всего 24 - 1 плитка оставлена ​​«пустой»). Смысл поиска состоит в том, чтобы переставить плитки, переместив «пробел» вверх, вниз, влево или вправо, чтобы в конечном итоге переставить плитки в правильном порядке.

Для этого поиска я создал «очередь» Arraylist. У меня есть метод, который принимает состояние по индексу 0 этого массива, находит каждый из возможных законных шагов и затем добавляет их каждый в конец массива.

Теоретически это продолжается до тех пор, пока в конечном итоге не будет найдено «состояние цели». Проблема в том, что, когда я запускаю поиск, массив 'queue' просто продолжает становиться все больше и больше. Сегодня я оставил его на несколько часов, но решение так и не было найдено.

Это говорит о том, что, возможно, я ошибся в этом решении, и есть гораздо лучший способ сделать поиск в ширину в Java. Я знаю, что мое решение работает (в конце концов), так как когда я использую начальное состояние, которое не слишком отличается от состояния цели, не требуется слишком много времени, чтобы найти правильный путь. Тем не менее, мне было дано начальное состояние, которое, к сожалению, далеко не близко к цели !!!

Любые советы или подсказки будут высоко оценены!

Ответы [ 11 ]

0 голосов
/ 28 января 2009

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

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

...