如何解决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 举报,一经查实,本站将立刻删除。