Поскольку вопрос помечен как jQuery, вы можете использовать $.param()
для уменьшенного объекта
var substr = [1, 2, 3, 4, 5, 6];
var query = $.param(substr.reduce((a,c)=> (a['url' + c]='',a),{}))
console.log(query)
[ 117]
Вы действительно хотите A *, это оптимальная реализация для поиска пути на основе сетки.
Это может помочь вам :
http://www.cokeandcode.com/main/tutorials/path-finding/
РЕДАКТИРОВАТЬ: Предыдущая ссылка подходит как для реализуемого набора классов, так и в качестве руководства по настройке методы поиска пути для удовлетворения вашего удовлетворения.
Это самый информативный пост о поиске пути, который я когда-либо видел: http: / /www.ai-blog.net/archives/000152.html
Естественно, вы многое узнаете о поиске пути, если напишете собственную реализацию. Но вы также потратите много времени на это.
Посмотрите библиотеку JGraphT , которая работает с графами в целом, имеет хороший API и поддерживает больше алгоритмов кратчайшего пути, чем просто А *.
Книга AI для разработчиков игр имеет очень хороший объяснение A *. На самом деле я собирался написать реализацию сегодня ... если я это сделаю, я приведу здесь код.
Код готов, его здесь слишком много, поэтому его можно взять из: https://chaos.bcit.ca/svn/public/astar/ (самозаверяющий сертификат, но сервер не делает ничего плохого).
Я следовал псевдокоду в книге для большинства отчасти, но я сделал все гораздо более объектно-ориентированным, чем все, что я видел до сих пор для A *.
У вас есть лабиринт, который состоит из плиток. У каждой плитки есть местоположение и препятствие (ноль, если нет препятствий).
Вы можете использовать PathFinder (например, AStar), чтобы найти кратчайший путь между заданным начальным и конечным местоположением. Вы получаете путь назад, который включает в себя плитки, которые вам нужно пройти, чтобы пройти от начала до конца.
Вы можете изменить эвристический расчет, предоставив другой HeuristicCalculator (текущий проверяет, чтобы увидеть, есть ли препятствие или нет, и вычисляет самое короткое число плиток, которые нужно пройти, например, вы можете добавить веса к различным препятствиям). если вам не нравится значение по умолчанию).
Код является лицензией в соответствии с LGPL, поэтому, если вы вносите изменения и распространяете приложение, вы должны сделать эти изменения доступными. Не стесняйтесь отправлять отчеты об ошибках / исправления на адрес электронной почты в комментарии к лицензии (находится в каждом заголовке).
Я (никогда не получал) комментировать его после экзаменов, но я думаю, что это довольно просто.
Вы можете изменить эвристический расчет, предоставив другой HeuristicCalculator (текущий проверяет, чтобы увидеть, есть ли препятствие или нет, и вычисляет самое короткое число плиток, которые нужно пройти, например, вы можете добавить веса к различным препятствиям). если вам не нравится значение по умолчанию).
Код является лицензией в соответствии с LGPL, поэтому, если вы вносите изменения и распространяете приложение, вы должны сделать эти изменения доступными. Не стесняйтесь отправлять отчеты об ошибках / исправления на адрес электронной почты в комментарии к лицензии (находится в каждом заголовке).
Я (никогда не получал) комментировать его после экзаменов, но я думаю, что это довольно просто.
Вы можете изменить эвристический расчет, предоставив другой HeuristicCalculator (текущий проверяет, чтобы увидеть, есть ли препятствие или нет, и вычисляет самое короткое число плиток, которые нужно пройти, например, вы можете добавить веса к различным препятствиям). если вам не нравится значение по умолчанию).
Код является лицензией в соответствии с LGPL, поэтому, если вы вносите изменения и распространяете приложение, вы должны сделать эти изменения доступными. Не стесняйтесь отправлять отчеты об ошибках / исправления на адрес электронной почты в комментарии к лицензии (находится в каждом заголовке).
Я (никогда не получал) комментировать его после экзаменов, но я думаю, что это довольно просто.
поэтому, если вы вносите изменения и распространяете приложение, вы должны сделать эти изменения доступными. Не стесняйтесь отправлять отчеты об ошибках / исправления на адрес электронной почты в комментарии к лицензии (находится в каждом заголовке).Я (никогда не получал) комментировать его после экзаменов, но я думаю, что это довольно просто.
поэтому, если вы вносите изменения и распространяете приложение, вы должны сделать эти изменения доступными. Не стесняйтесь отправлять отчеты об ошибках / исправления на адрес электронной почты в комментарии к лицензии (находится в каждом заголовке).Я (никогда не получал) комментировать его после экзаменов, но я думаю, что это довольно просто.