#include "stdafx.h"
#include<iostream>
#include<list>
using namespace std;
class Graph
{
int V;
list<int> *adj;
void DFSUtil(int v, bool visited[]);
public:
Graph(int V);
void addEdge(int v, int w);
void DFS(int v);
void print();
void deleteVertex(int v);
};
Graph::Graph(int V)
{
this->V = V;
adj = new list<int>[V];
}
void Graph::addEdge(int v, int w)
{
adj[v].push_back(w);
adj[w].push_back(v);
}
void Graph::print() {
for (int v = 0; v < V; v++) {
cout << "List: " << v << endl;
for (auto x : adj[v])
cout << "-->" << x;
cout << endl;
}
}
void Graph::deleteVertex(int v)
{
//adj[v].remove();
}
void Graph::DFSUtil(int v, bool visited[])
{
visited[v] = true;
cout << v << " ";
list<int>::iterator i;
for (i = adj[v].begin(); i != adj[v].end(); ++i)
if (!visited[*i])
DFSUtil(*i, visited);
}
void Graph::DFS(int v)
{
bool *visited = new bool[V];
for (int i = 0; i < V; i++)
visited[i] = false;
DFSUtil(v, visited);
}
int main()
{
int size;
cout << "Enter count of Vertex" << endl;
cin >> size;
Graph g(size);
int firstVertex, secondVertex;
int answer = 1, i = 0;
while (answer != 0 && i < size - 1) {
i++;
cout << "Enter conected Vertex: \n";
cin >> firstVertex;
cin >> secondVertex;
cout << "Do you want to continue? 1 yes 0 - no" << endl;
cin >> answer;
cout << "\nCurrent i is" << i << endl;
g.addEdge(firstVertex, secondVertex);
}
g.deleteVertex(2);
g.DFS(0);
cout << endl;
g.print();
return 0;
}
Как реализовать правильно функцию удаления вершины? Если возможно помогите кодом
1.Вызываем функцию удаления вершины
2.В функции ищем нашу вершину,которую хотим удалить
3.Запоминаем смежные ей вершины(их же максимум 2?)
4.Делаем одно общее ребро для смежных вершин
5.Удаляем вершину из графа (...delete()...)
Сборка персонального компьютера от Artline: умный выбор для современных пользователей