一、问题描述
给出一个距离的集合D, 求出在x轴,存在哪些点能够组合成这样的距离集合;
假设第一个点在0处:path[1] = 0;
最后一个点是距离集合中最大的距离:path[N] = max(D);
使用堆或是红黑树存放距离集合D;
二、具体的代码如下
#include <iostream>
#include <vector>
#include <set>
using namespace std;
bool place(vector<int>& path, multiset<int>& D, int N, int left, int right) {
bool found = false;
if (D.empty())
return true;
multiset<int>::iterator iter = D.end();
--iter;
path[right] = *iter;
int i, j;
for (i = 1; i < left; i++) {
if ((iter = D.find(path[right] - path[i])) != D.end())
D.erase(iter);
else
{
for (int k = i - 1; k > 0; k--)
D.insert(path[right] - path[i]);
break;
}
}
if (i == left) {
for (i = right + 1; i <= N; i