微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

bfs 算法错误我无法理解我使用 c# unity

如何解决bfs 算法错误我无法理解我使用 c# unity

我使用 bfs 算法找到了从点到点的最短路径,这些点分散在地图上,但出现了我无法理解的错误

代码

private void List<NodeScript>(Breadthwise,(NodeScript start,NodeScript end))
{
    result = new List<NodeScript>();
    List<NodeScript> visited = new List<NodeScript>();
    Queue<NodeScript> work = new Queue<NodeScript>();

    start.history = new List<NodeScript>();
    visited.Add(start);
    work.Enqueue(start);

    while (work.Count > 0)
    {
        NodeScript current = work.Dequeue();
        if (current == end)
        {
            //Found Node
            result = current.history;
            result.Add(current);
            return result;
        }
        else
        {
            //Didn't find Node
            for (int i = 0; i < current.neighbors.Length; i++)
            {
                NodeScript currentNeighbor = current.neighbors[i];
                if (!visited.Contains(currentNeighbor))
                {
                    currentNeighbor.history = new List<NodeScript>(current.history);
                    currentNeighbor.history.Add(current);
                    visited.Add(currentNeighbor);
                    work.Enqueue(currentNeighbor);
                }
            }
        }
    }
    //Route not found,loop ends
    return null;
}

我从更新调用广度函数

NodeScript 类

    public class NodeScript : MonoBehavIoUr
{
    public NodeScript[] neighbors;
    public List<NodeScript> history = new List<NodeScript>();
    public void OnDrawGizmos()
    {
        Gizmos.DrawIcon(transform.position,"blendsampler");
        foreach(var node in history)
        {
            Gizmos.DrawLine(transform.position,node.transform.position);
        }
    }
}

错误 Assets\botAiScript.cs(38,46):错误 CS1001:需要标识符

感谢您的帮助

解决方法

public class botAiScript : MonoBehaviour
{
    public List<NodeScript> AllNodes = new List<NodeScript>();
    public NodeScript ClosestNode;
    public NodeScript TargetNode;
    public Transform Target;
    public List<NodeScript> Path;
    public Movement mvmt;
    public float minDist;
    public float maxDist;
    public List<NodeScript> result;
    void Awake()
    {
        //Path = new List<NodeScript>();
        AllNodes = FindObjectsOfType<NodeScript>().ToList();
    }
    NodeScript GetClosestNodeTo(Transform t)
    {
        NodeScript fNode = null;
        float minDistance = Mathf.Infinity;
        foreach(var node in AllNodes)
        {
            float distance = (node.transform.position - t.position).sqrMagnitude;
            if(distance<minDistance)
            {
                minDistance = distance;
                fNode = node;
            }
        }
        return fNode;
    }
    private void List<NodeScript>(Breadthwise,(NodeScript start,NodeScript end))
    {
        result = new List<NodeScript>();
        List<NodeScript> visited = new List<NodeScript>();
        Queue<NodeScript> work = new Queue<NodeScript>();

        start.history = new List<NodeScript>();
        visited.Add(start);
        work.Enqueue(start);

        while (work.Count > 0)
        {
            NodeScript current = work.Dequeue();
            if (current == end)
            {
                //Found Node
                result = current.history;
                result.Add(current);
                return result;
            }
            else
            {
                //Didn't find Node
                for (int i = 0; i < current.neighbors.Length; i++)
                {
                    NodeScript currentNeighbor = current.neighbors[i];
                    if (!visited.Contains(currentNeighbor))
                    {
                        currentNeighbor.history = new List<NodeScript>(current.history);
                        currentNeighbor.history.Add(current);
                        visited.Add(currentNeighbor);
                        work.Enqueue(currentNeighbor);
                    }
                }
            }
        }
        //Route not found,loop ends
        return null;
    }
    //void MoveTowardsPath()
    //{
    //    mvmt.xMovement = 0;
    //    mvmt.jumpPress = false;
    //    var currentNode = Path.First();
    //    if (Path.Count > 0)
    //    {
    //        var xMag = Mathf.Abs(currentNode.transform.position.x - transform.position.x);
    //        var yMag = Mathf.Abs(currentNode.transform.position.y - transform.position.y);
    //        if (currentNode && xMag >= minDist && yMag <= maxDist)
    //        {
    //            if (transform.position.x > currentNode.transform.position.x)
    //            {
    //                mvmt.xMovement = -1;
    //            }
    //            if (transform.position.x < currentNode.transform.position.x)
    //            {
    //                mvmt.xMovement = 1;
    //            }
    //            if (transform.position.y < currentNode.transform.position.y && (yMag > minDist))
    //            {
    //                mvmt.jumpPress = true;
    //            }
    //        }
    //        else
    //        {
    //            if (Path.Count > 1)
    //            {
    //                Path.Remove(Path.First());
    //            }
    //            if (Path.First() == TargetNode && Vector2.Distance(currentNode.transform.position,transform.position) < minDist)
    //            {
    //                Path.Clear();
    //            }
    //        }
    //    }
    //}
    void Update()
    {
        if (!GetClosestNodeTo(Target).Equals(TargetNode))
        {
            Debug.Log("1");
            Breadthwise( GetClosestNodeTo(transform),GetClosestNodeTo(Target));
        }
        //MoveTowardsPath();
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。