Member 14085218 Ответов: 0

Как я могу напечатать путь, пройденный в dijkstra'S с помощью стека ?


я сделал класс dijkstra для вычисления кратчайшего пути но мне нужен метод для печати пути прохождения с помощью стека я не знаю как я могу это сделать мне нужна ваша помощь в этом

Что я уже пробовал:

import java.util.Comparator;
import java.util.Hashtable;
import java.util.List;
import java.util.PriorityQueue;


public class Dijkstra {

	Hashtable<Integer, SearchNode> visitedNodes = new Hashtable();

	Comparator<searchnode> cmp = new Comparator<searchnode>() {
		// @Override
		public int compare(SearchNode m, SearchNode n) {
			return m.cost - n.cost;
		}
	};

	PriorityQueue<searchnode> pQueue = new PriorityQueue<searchnode>(cmp);

	public int getShortestPath(Graph g, int source, int destination) {
		SearchNode sourceSearchNode = new SearchNode(source, 0);
		pQueue.add(sourceSearchNode);
		visitedNodes.put(source, sourceSearchNode);
		while (!pQueue.isEmpty()) {
			SearchNode currentNode = pQueue.poll();
			if (currentNode.nodeId == destination) {
				return currentNode.cost;
				
			}
			if (visitedNodes.get(currentNode.nodeId).settled) {
				continue;
			}
			visitedNodes.get(currentNode.nodeId).settled = true;

			List<edge> edges = g.getEdges(currentNode.nodeId);
			for (Edge edge : edges) {
				int newCost = (int) (currentNode.cost + edge.getCost());
				int edgeDestinationNodeId = edge.getDestination();
				SearchNode edgeDtSearchNode = visitedNodes.get(edgeDestinationNodeId);
				if (edgeDtSearchNode == null || newCost < edgeDtSearchNode.cost) {
					if (edgeDtSearchNode == null) {
						edgeDtSearchNode = new SearchNode(edgeDestinationNodeId, newCost);
						visitedNodes.put(edgeDestinationNodeId, edgeDtSearchNode);
					}
					edgeDtSearchNode.cost = newCost;
					edgeDtSearchNode.parent = currentNode.nodeId;
					pQueue.add(edgeDtSearchNode);

				}

			}

		}
		return Integer.MAX_VALUE;

	}

OriginalGriff

Вы написали код, что мешает вам напечатать его самостоятельно?

[no name]

я попробовал напечатать путь по стеку и он не работает если есть что то что вы можете мне помочь я был бы очень благодарен

OriginalGriff

Итак, что вы попробовали: покажите нам соответствующие фрагменты кода.
И объясните себе: "это не работает" ничего не говорит нам о том, что он сделал, чего вы не ожидали, или не сделал того, что вы сделали!

И вы написали этот код, так что вы должны полностью понять его!

Afzaal Ahmad Zeeshan

Зачем использовать стек?

[no name]

мне это нужно с помощью стека , что-нибудь еще ?

OriginalGriff

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

0 Ответов