Я пытаюсь решить эту проблему в коде c++, я бы хотел иметь неконсервированные решения (как повышение).
Определено это --- неориентированное соединение. Предположим, что имеется график неопределенной размерности с его индексами, хранящийся в контейнере:
1 - Obj1
2 - Obj2
3 - Obj3
4 - Obj4
5 - Obj5
...
Теперь предположим, что:
1 --- 5
2 --- 3
4 --- 2
...
Теперь мы решили удалить 3 - Obj 3, я бы хотел:
1 - Obj1
2 - Obj2
3 - Obj4
4 - Obj5
...
а также
1 --- 4
3 --- 2
...
Я также хотел бы получить доступ к этим объектам по индексам. Я пытаюсь найти решение, но не могу.
Что мне нужно больше делать с этими элементами: сначала добавьте их, со своими свойствами, хранящимися в объектах, то же самое для соединений, без каких-либо затрат. После того, как мне нужно удалить некоторые из них, сохраняя ссылки.
Какая самая простая, наиболее эффективная возможная реализация, любые идеи об использовании STL?
Благодарю!
Если вы хотите, чтобы все было просто, просто используйте вектор для ваших вершин. V
- тип ваших вершин.
std::vector<V> vertex;
vertex.push(Obj1);
vertex.push(Obj2);
vertex.push(Obj3);
vertex.push(Obj4);
vertex.push(Obj5);
Вы можете удалить вершину, позвонив
vertex.erase(vertex.begin()+2); //delete the third entry
а затем vertex[2]
будет Obj4
вместо Obj3
.
Ребра графа немного сложнее. Вы можете создать список смежности, который в основном представляет собой двумерный вектор.
std::vector<std::vector<V> > adjacency_list;
Вам просто нужно убедиться, что вы удаляете i
ю строку, каждую запись i
и уменьшаете все записи, большие, чем i
на единицу, если вы удалите i
ю вершину.