AABB
AlignmentBehavior
ArriveBehavior
AStar
BFS
BoundingSphere
BVH
BVHNode
Cell
CellSpacePartitioning
CohesionBehavior
CompositeGoal
ConvexHull
Corridor
CostTable
DFS
Dijkstra
Edge
EntityManager
EvadeBehavior
EventDispatcher
Behavior
FollowPathBehavior
FuzzyAND
FuzzyCompositeTerm
FuzzyFAIRLY
FuzzyModule
FuzzyOR
FuzzyRule
FuzzySet
FuzzyTerm
FuzzyVariable
FuzzyVERY
GameEntity
Goal
GoalEvaluator
Graph
GraphUtils
HalfEdge
HeuristicPolicyDijkstra
HeuristicPolicyEuclid
HeuristicPolicyEuclidSquared
HeuristicPolicyManhattan
InterposeBehavior
LeftSCurveFuzzySet
LeftShoulderFuzzySet
LineSegment
Logger
MathUtils
Matrix3
Matrix4
MemoryRecord
MemorySystem
MeshGeometry
MessageDispatcher
MovingEntity
NavEdge
NavMesh
NavMeshLoader
NavNode
Node
NormalDistFuzzySet
OBB
ObstacleAvoidanceBehavior
OffsetPursuitBehavior
OnPathBehavior
Path
Plane
Polygon
Polyhedron
PriorityQueue
PursuitBehavior
Quaternion
Ray
RectangleTriggerRegion
Regular
RightSCurveFuzzySet
RightShoulderFuzzySet
SAT
SeekBehavior
SeparationBehavior
SingletonFuzzySet
Smoother
SphericalTriggerRegion
State
StateMachine
SteeringBehavior
SteeringManager
Task
TaskQueue
Telegram
Think
Time
TriangularFuzzySet
Trigger
TriggerRegion
Vector3
Vehicle
Version
WanderBehavior

search

搜索算法是一个在图形中查找路径的算法。 这个算法使用了深度优先搜索(DFS)的技术来查找路径。 在搜索图形的过程中,它找到了从源点到目标点的一条路径,只要这条路径是存在的。

函数签名

function search(graph, startNode, endNode, constraints={})

参数

  1. graph (required): 图形数据对象。
  2. startNode (required): 开始节点的名称。
  3. endNode (required): 结束节点的名称。
  4. constraints (optional): 包含对象的字典,用于限制搜索的结果。

约束(constraints)

一个约束是一种可以被用于搜索算法中的一组限制。

  1. maxDepth (optional): 这是搜索算法能够到达的最大深度。
  2. allowLoops (optional): 如果这个布尔值是false,在搜索算法中将不允许使用环路。

返回值

一个数组,表示从开始节点到结束节点的路径列表。如果找不到路径,则返回一个空数组。

异常

  1. NoPathFoundError: 如果没有找到到目标节点的路径,抛出此错误。

示例

const graph = {
  a: { neighbors: ['b'] },
  b: { neighbors: ['c', 'd'] },
  c: { neighbors: [] },
  d: { neighbors: ['e'] },
  e: { neighbors: [] }
};

search(graph, 'a', 'e'); // ['a', 'b', 'd', 'e']
const graph = {
  a: { neighbors: ['b'] },
  b: { neighbors: ['a', 'c'] },
  c: { neighbors: [] }
}

search(graph, 'a', 'c', { allowLoops: false }); // error: NoPathFoundError
const graph = {
  a: { neighbors: ['b'] },
  b: { neighbors: ['c', 'd'] },
  c: { neighbors: [] },
  d: { neighbors: ['e'] },
  e: { neighbors: [] }
};

search(graph, 'a', 'e', { maxDepth: 2 }); // []

实现

搜索算法是一个重要的算法,它可以用于许多AI、游戏和软件工程领域。在我们的实现中,我们使用了深度优先搜索(DFS)的技术来搜索图形。为了保证搜索得到的结果是正确的,我们使用了递归技术来遍历图形,同时维护一个已经被访问过的节点集合。在搜索的过程中,我们检查目标节点是否已经被访问过,是的话,我们就返回到搜索路径中找到这个节点,并将此路径返回。