我有一个图表,其中给定一个节点,我必须生成按最近距离排序的图形的所有其他节点的有序向量。
所以,我有一个带有所有坐标的矢量和一个单独的坐标,可以将它与所有其他坐标进行比较。我的想法是创建一个地图,它将保存任何coordiante(节点),一个矢量,其中所有其他坐标按最近位置排序。
我可以使用std :: sort吗?或者以任何方式简化这个?
由于
答案 0 :(得分:2)
假设你的节点是全局的,你可以做这样的事情
#include <vector>
#include <iostream>
#include <utility>
std::pair<float,float> MyNode(10,20);
struct CalculateDistance{
float operator()(std::pair<float,float> temp) {
//Use MyNode to calculate the distance between MyNode and temp and return it
}
};
int main(){
std::vector<std::pair<float,float> > listOfCoordinates;
listOfCoordinates.push_back(std::make_pair(10.20,30.2));
listOfCoordinates.push_back(std::make_pair(9.20,31.2));
listOfCoordinates.push_back(std::make_pair(12.20,39.2));
listOfCoordinates.push_back(std::make_pair(15.20,-30.2));
std::vector<float> distances;
std::copy(listOfCoordinates.begin(),listOfCoordinates.end(),distances.begin(),CalculateDistance());
std::sort(distances.begin(),distances.end());
}
但这只是一种方式,你应该发布一些代码或更具体,以便有人可以帮助你。我没有进行实际计算,CalculateDistance()
应返回表示距离的浮点数。我没有编译我的代码,只是为了向您展示主要想法。
如果您想保持节点和距离之间的关系,您可以执行以下操作:
typedef std::pair<float,float> Coordinate;
typedef float Distance;
typedef std::pair<Coordinate,Distance> Node;
并使用Node
的向量答案 1 :(得分:1)
我可以使用std :: sort吗?
我认为你的方向错了。如果保持一个具有所有节点坐标的向量并将它们作为距当前节点的距离的基础进行排序,则它不一定要比较给定向量中的2个坐标! 。
这是std::sort
所要求的
要解决此问题,您需要预先计算给定节点中所有节点的距离,然后为compare()
定义std::sort()
函数,该函数将根据最小距离进行比较。
总时间复杂度:O(N logN)
。
或以任何方式简化此事?
相反,有一种更简单的方法
给定您的节点,使用队列执行breadth first search。执行BFS时,首先访问原始节点距离1
的所有节点,然后距离2
,等等......这正是所需要的。
总时间复杂度:O(N)
。
希望这有帮助!