Удаление ребра из списка смежности - PullRequest
0 голосов
/ 01 октября 2018

Я реализовал график, используя список смежности, сейчас я пытаюсь реализовать функцию 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();
}

Если есть предложения, я буду очень признателен.

1 Ответ

0 голосов
/ 01 октября 2018

Используйте 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...