стоит задача графического отображения объектов.
есть N элементов. Из этока множества попарно известны расстояния (но правда не все)
Нужен алгоритм расстановок точек в геометрич. фигуру.
В самом деле что-то не нашел готового решения, поэтому предложили
создать граф и задать веса, а после попытаться найти локальный минимум
для каждой вершины и глобальный для всей системы (имеется стабильное состояние системы)
P.S. Книгу про boost::graph заказал, но идти будет несколько дней, а тут нужно срочно.
Можно ли решить данную задачу с помощью данной библиотеки или есть еще какие способы ?
Если не сложно — то небольшой примерчик по работе с библиотекой...
пример поиска кратчайшего пути (вес = расстояние между узлами):
#include <boost/graph/dijkstra_shortest_paths.hpp>
#include <boost/graph/adjacency_list.hpp>
using namespace std;
using namespace boost;
int main(int argc, char* argv[])
{
typedef adjacency_list<vecS, vecS, undirectedS, property<vertex_distance_t, double>, property<edge_weight_t, double> > GraphType;
GraphType G;
property_map<GraphType, edge_weight_t>::type weightmap;
GraphType::edge_descriptor ed;
bool inserted;
tie(ed, inserted) = add_edge(1, 2, G); weightmap[ed] = 5;
tie(ed, inserted) = add_edge(1, 3, G); weightmap[ed] = 20;
tie(ed, inserted) = add_edge(2, 3, G); weightmap[ed] = 8;
int start_vertex_id = 1;
int end_vertex_id = 3;
GraphType::vertex_descriptor vd;
vd = vertex(start_vertex_id, G);
vector<GraphType::vertex_descriptor> pp(num_vertices(G));
vector<double> dd(num_vertices(G));
dijkstra_shortest_paths(G, vd, predecessor_map(&pp[0]).distance_map(&dd[0]));
int i = end_vertex_id;
cout << "path: " << i;
while(i != start_vertex_id) {
i=pp[i];
cout << " " << i;
}
cout << "; len: " << dd[end_vertex_id] << endl;
return 0;
}
Здравствуйте, k732, Вы писали:
K>Если не сложно — то небольшой примерчик по работе с библиотекой...
Здравствуйте, k732, Вы писали:
K>стоит задача графического отображения объектов.
K>есть N элементов. Из этока множества попарно известны расстояния (но правда не все)
K>Нужен алгоритм расстановок точек в геометрич. фигуру.
Задача уже решена? Есть несколько идей, необязательно с Boost::Graph

Д.К. << RSDN@Home 1.2.0 alpha rev. 655>>
Здравствуйте, k732, Вы писали:
K>Если не сложно — то небольшой примерчик по работе с библиотекой...
В той книге которую Вы заказали все примеры находятся здесь:
boost\libs\graph\example\
примеры нахождения кратчайших путей с помощью алгоритма Дейкстры, Беллмана-Форда и многое другое Вы сможете найти там + вся документация в boost\libs\graph\doc\ по мотивам этой книги...
... << RSDN@Home 1.2.0 alpha 4 rev. 1090>>
Идея следующая. Берем какой-нибудь алгоритм раскладки графа, использующий физические аналогии (в Бусте есть Камада-Каваи и Фрухтерман-Рейнгольд), разбираемся, как он работает. Потом добавляем в эту физическую систему дополнительные силы, действующие на пары вершин, для которых известно расстояние. Своего рода "пружины", которые в состоянии покоя имеют заданную длину. Сжатие и растяжение приводит к появлению противодействующей силы. Надо поиграться с коэффициентами разных сил, думаю, можно получить приличный результат.
Д.К. << RSDN@Home 1.2.0 alpha rev. 655>>