Пример #1
0
        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));
        }
Пример #2
0
 // Addition
 public bool HasNext()
 {
     return(heap.Size() > 0);
 }
Пример #3
0
 public int Count()
 {
     return(heap.Size());
 }