Ejemplo n.º 1
0
    private NodeDi DijkstrasAlgo(NodeDi start, NodeDi end)
    {
        openList = new List <NodeDi>();
        workList = new List <NodeDi>();
        start.setWeight(0);
        start.isOpen = false;
        openList.Add(start);

        while (openList.Count > 0)
        {
            int index = GetMinFNodeAS();
            if (index < 0)
            {
                //UnityEngine.Debug.Log("index -1");
                break;
            }
            NodeDi current = openList[index];
            openList.RemoveAt(index);
            workList.Add(current);

            if (current.Equals(end))
            {
                return(current);
            }

            foreach (NodeDi neighNode in GetNeighbours(current))
            {
                float distance = Vector3.Distance(neighNode.getPosition(), current.getPosition());
                distance = current.weight + distance;

                neighNode.isOpen = false;
                neighNode.setWeight(distance);
                neighNode.setParentNode(current);
                openList.Add(neighNode);
            }
        }
        return(null);
    }