У меня есть трудная проблема для решения (по крайней мере, так я ее вижу). У меня есть die (лица с 1 по 6) с разными значениями (другие, чем [1-6]) и доски (n-by-m). У меня начальная позиция и финишная позиция. Я могу перейти от квадрата к другому, прокатив кубик. Делая это, я должен добавить верхнюю грань к сумме/стоимости.Самый короткий путь путем прокатки кубиков
Теперь я должен рассчитать, как добраться из стартового положения в конечное положение с минимальной суммой . Я пробовал почти все, но я не могу найти правильный алгоритм.
Я попробовал Dijkstra, но это бесполезно, потому что на правильном пути есть некоторые промежуточные узлы , которые я могу достичь с лучшей суммой с другого пути (что в конце концов оказывается неправильным). Как мне изменить свой алгоритм?
Обзоралгоритма:
Дейкстр: PriorityQueue
если (я могу добраться до узла с меньшей суммой)
, удалить его из очереди,
меняю его стоимость и его кубик положения
, добавить он в очереди.
Это код:
public void updateSums() {
PriorityQueue<Pair> q = new PriorityQueue<>(1, new PairComparator());
Help h = new Help();
q.add(new Pair(startLine, startColumn, sums[startLine][startColumn]));
while (!q.isEmpty()) {
Pair current = q.poll();
ArrayList<Pair> neigh = h.getNeighbours(current, table, lines, columns);
table[current.line][current.column].visit(); //table ->matrix with Nodes
for (Pair a : neigh) {
int alt = sums[current.line][current.column] + table[current.line][current.column].die.roll(a.direction);
if (sums[a.line][a.column] > alt) {
q.remove(new Pair(a.line, a.column, sums[a.line][a.column]));
sums[a.line][a.column] = alt; //sums -> matrix with costs
table[a.line][a.column].die.setDie(table[current.line][current.column].die, a.direction);
q.add(new Pair(a.line, a.column, sums[a.line][a.column]));
}
}
}
}
Алгоритм Дейкстры должен отлично работать здесь, как и другие алгоритмы исследования графа, такие как [A *] (http://en.wikipedia.org/wiki/A*_search_algorithm). Можете ли вы опубликовать реализацию Алгоритма Джикстры, которую вы пытались, плюс код, который вы использовали для его вождения? Проблема может заключаться в этом коде. – sigpwned
i обновил мой пост – user2403558
Связанный: [A * Допустимая эвристика для прокатки по сетке] (http://stackoverflow.com/questions/16547724) –