查找在特定距离内可以从给定节点到达的所有节点

时间:2016-11-19 03:22:38

标签: algorithm search breadth-first-search

也可以按顺序遍历多个节点以创建路径。

struct Node {
  float pos [2];
  bool visited = false;
};

// Search Space
Node nodes [MAX_NODE_COUNT];

// Function to return all reachable nodes
// nodeCount : Number of nodes
// nodes : Array of nodes
// indexCount : Size of the returned array
// Return : Returns array of all reachable node indices
int* GetReachableNodes (int nodeCount, Node* nodes, int* indexCount)
{
   // This is the naive approach
   queue <int> indices;
   vector <int> indexList;
   indices.push (nodes [0]);
   nodes [0].visited = true;

   // Loop while queue is not empty
   while (!indices.empty ())
   {
     // Pop the front of the queue
     int parent = indices.front ();
     indices.pop ();
     // Loop through all children
     for (int i = 0; i < nodeCount; ++i)
     {
       if (!nodes [i].visited && i != parent && DistanceSqr (nodes [i], nodes [parent]) < maxDistanceSqr)
       {
         indices.push (i);
         nodes [i].visited = true;
         indexList.push_back (i);
       }
     }
   }
   int* returnData = new int [indexList.size ()];
   std::move (indexList.begin (), indexList.end (), returnData);
   *indexCount = indexList.size ();
   // Caller responsible for delete
   return returnData;
}

问题是我无法使用图表,因为所有节点都相互连接。 所有数据只是一个节点阵列及其位置和起始节点。

我可以使用BFS轻松解决这个问题,但它是n ^ 2。 我一直在研究如何以低于O(n ^ 2)的时间复杂度来解决这个问题。

我尝试的一些方法是并行BFS,Dijkstra,但它并没有多大帮助。

任何帮助都将非常感激。

0 个答案:

没有答案
相关问题