В настоящее время я работаю над исследовательским проектом, в котором используется проприетарное программное обеспечение. Я пытаюсь заменить проприетарные библиотеки C для представления графа. Это облегчит перенос нашего проекта на открытую платформу и сделает его доступным для всех бесплатно.
В проекте смешаны C и C++, поэтому, если мы собираемся внедрить библиотеку C, она должна прекрасно сочетаться с C++.
Текущие библиотеки используют указатели для всего и приведения типов для хранения и извлечения данных . void*
Это позволяет довольно легко:
Вершины имеют тип PrgT_Graph_Vertex*
и могут иметь связанный void*
указатель для хранения связанной информации. Аналогичная логика используется в отношении ребер. Вот конкретный пример .
Замена должна иметь лицензию, не обеспечивающую авторское лево, поэтому она не может быть GPL. С лицензиями в стиле BSD все в порядке.
Библиотека Boost Graph , теперь BGL, имеет лицензию OK и является частью известного пакета. Тем не менее, его документация фрагментарна и выглядит так, как будто она была «залатана» воедино, а не продуманно «построена». Удаление вершин кажется непростым делом, так как это может испортить индексы вершин.
Библиотека Lemon Graph имеет ту же лицензию , что и BGL, выглядит проще, но не так активно поддерживается (см. дорожную карту ).
У Stanford SNAP есть лицензия OK , у нее самый красивый веб-сайт, но документации очень не хватает.
iGraph не подходит, потому что он находится под лицензией GPL . Кроме того, насколько я понимаю, для C++ потребуется использовать оболочку.
Network Graph Toolkit , разработанный NIST, выпущен в общественное достояние, но не похоже, что он вообще документирован (кроме комментариев к коду).
BGL, похоже, дает наилучшие гарантии того, что он будет активно развиваться. Но это также довольно далеко от моей текущей логики реализации и займет много времени только для того, чтобы начать.
Любое предложение?
Я полагаю, что уже слишком поздно помогать оригинальному плакату, но, поскольку этот вопрос появился в списке «Горячие вопросы сети», вот рекомендация.
Библиотека STLPlus активно поддерживается и имеет хорошую реализацию ориентированного графа . Он доступен под лицензией BSD. Есть форум, мейнтейнер обычно отвечает в течение пары дней и открыт для предложений/доработок.
Ответ кажется настолько очевидным, что я боюсь, что неправильно понял вопрос.
Конечно, ничто не сравнится с Graphviz? Он существует всегда, активно поддерживается и имеет большую поддержку.
Мне это нравится, потому что он принимает обычный текстовый ввод, который я могу генерировать из своих данных самых разных форматов.
Этот
graph {
a -- b;
b -- c;
a -- c;
d -- c;
e -- c;
e -- a;
}
производит это
Не нужно связывать его с вашей программой, просто запустите его как команду оболочки из своего приложения.
Это то, что вы подразумеваете под графом сети?
Смотрите еще много здесь и здесь .
Или я неправильно понял?
айнпоклум
Агостино
айнпоклум
Агостино
айнпоклум
Мог говорит восстановить Монику
Агостино
Сабольч
Сабольч