从邻接列表中移除边

Removing an edge from an adjacency list

本文关键字:列表      更新时间:2023-10-16

我使用邻接列表实现了一个图形,我现在正在尝试实现一个removeEdge函数。我能够使用邻接矩阵做到这一点,但对我来说该怎么做有点困惑。

这就是我到目前为止所拥有的,但擦除部分是错误的,所以只需要一些帮助来做什么。

/*
* C++ Program to Implement Adjacency List Graph Implementationn UNDIRECTED
*/
#include <iostream>
#include <vector>

const int V = 5;
std::vector<int> adj[V];

void addEdge(int u, int v) {
adj[u].push_back(v);
adj[v].push_back(u);
}
void removeEdge(int u, int v) {
adj[u].erase(v);
adj[v].erase(u);
}
void print() {
for (int v = 0; v < V; ++v) {
std::cout << "n Adjacency list of vertex "
<< v << "n head ";
for (auto x : adj[v])
std::cout << "-> " << x;
}
std::cout << "n";
}
int main() {
int V = 5;
addEdge(0, 1);
addEdge(0, 4);
addEdge(1, 2);
addEdge(1, 3);
addEdge(1, 4);
addEdge(2, 3);
addEdge(3, 4);
print();
removeEdge(2, 3);
print();
std::cin.get();
}

如果有人有一些建议,我将不胜感激。

使用iterator查找要删除的元素。之后,使用erase方法将其删除。

void removeEdge(int u, int v) {
// remove edge from u to v
vector<int>::iterator it  = std::find(adv[u].begin(), adv[u].end(), v);
adv[u].erase(it);
// remove edge from v to u
it  = std::find(adv[v].begin(), adv[v].end(), u);
adv[v].erase(it);
}