В лекции Стэнфордского Алгоритмы, Prof Roughgarden перечислил следующие ингредиенты для списка смежности:объекта на основе граф представление в питоне
- массива или список вешины
- массив или список ребер
- Каждой вершины Список вершин указывает на ребра, падающие на него.
- Каждое ребро в списке краев указывает на его граничные точки.
Как это реализовать в python, особенно сочетание 3 и 4? Это было для меня проблемой. Я сделал это на C++ с указателями. Я могу думать об одном пути, пожалуйста, дайте мне знать, если вы считаете, что это правильно. Число 4 может быть выполнено с помощью набора кортежей Edges = [(1,2),(3,2),(4,1)]
или добавить еще один элемент в кортеж для значения веса. Как заставить список вершин указывать на связанные с ним ребра? Vertices = {1 : [0,2] 2: [0,1] 3: [1] 4:[3]}
Здесь Вершины - это словарь, а значение каждой клавиши (вершины) - это список индексов Edges, содержащих ключ (Vertex). Это кажется разумным?
Хорошо, я также дам его реализацию на С ++.
struct Node;
struct Arcs; //Forward declarations as each of them references each other
using namespace std
struct SimpleGraph // Has all the nodes
{
set<Node *> nodes;
set<Arc *> arcs;
}
//Node contains node_number and the set of arcs/edges from this node.
struct Node
{
int node_number;
set<Arc *> arcs;
}
// Arc contains start and finish node and the cost associated with the Arc/Edge
struct Arc
{
Node* start;
Node* finish;
double cost;
}
Поскольку мы используем указатели на C++, изменение в Arc информации отражается в узле автоматически. Недостаток указателей затрудняет это в python. Поэтому я пытался сделать все, что мог.
Если вы уже внедрили его на C++, покажите код и укажите, какие части не работают в python. – tamasgal
septi, теперь я добавил код C++ для этого. – vkaul11