public static List <Node> Dijkstras(Graph graph, Vector2 sourceVect, Vector2 goalVect) { Node source = null; Node goal = null; Node expandedNode; List <Node> finalizedSet = new List <Node>(); FibonacciHeap <Node, float> prioQueue = new FibonacciHeap <Node, float>(0); foreach (Node node in graph.Nodes) { node.Distance = 1f / 0f; node.SetPredecessor(graph.Nodes, null); if (node.MapPos == sourceVect) { source = node; } else { prioQueue.Insert(new FibonacciHeapNode <Node, float>(node, node.Distance)); } if (node.MapPos == goalVect) { goal = node; } } source.Distance = 0; prioQueue.Insert(new FibonacciHeapNode <Node, float>(source, source.Distance)); while (prioQueue.Size() != 0) { expandedNode = prioQueue.RemoveMin().Data; finalizedSet.Add(expandedNode); foreach (Node node in graph.Adj[expandedNode]) { if (node.Distance > expandedNode.Distance + 1) { node.Distance = expandedNode.Distance + 1; node.SetPredecessor(graph.Nodes, expandedNode); } } } return(BuildPath(graph, source, goal)); }
// Addition public bool HasNext() { return(heap.Size() > 0); }
public int Count() { return(heap.Size()); }