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();
}
}

最新更新