有必要创建图的邻接列表并从中删除某些边(在 0 和 1、2 和 3、3 和 8 之间)和编号为 5 的节点。
如何实现删除功能?
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
//задание 3
struct adjlistnode //список смежности узла
{
int dest;
struct adjlistnode* next;
};
struct adjlist //список смежности
{
struct adjlistnode* head;
};
struct Graph
{
int V;
struct adjlist* array;
};
struct adjlistnode* newadjlistnode(int dest);
struct Graph* creategraph(int V);
void addedge(struct Graph* graph, int src, int dest);
void printgraph(struct Graph* graph);
void deleteedge(struct Graph* graph, int src, int dest);
void deletevertex(struct Graph* graph, int src, int dest);
int main()
{
setlocale(LC_ALL, "russian");
int V = 8;
struct Graph* graph = creategraph(V);
addedge(graph, 0, 1);
addedge(graph, 1, 2);
addedge(graph, 2, 3);
addedge(graph, 3, 8);
addedge(graph, 8, 4);
addedge(graph, 4, 6);
addedge(graph, 6, 7);
addedge(graph, 7, 0);
addedge(graph, 0, 6);
addedge(graph, 1, 6);
addedge(graph, 1, 5);
addedge(graph, 2, 5);
addedge(graph, 3, 5);
addedge(graph, 3, 4);
addedge(graph, 4, 5);
addedge(graph, 5, 6);
printgraph(graph);
return 0;
}
struct adjlistnode* newadjlistnode(int dest)//создание узла нового списка смежности
{
struct adjlistnode* newnode = new adjlistnode;
newnode->dest = dest;
newnode->next = NULL;
return newnode;
}
struct Graph* creategraph(int V)
{
struct Graph* graph = new Graph;
graph->V = V;
graph->array = new adjlist; // создание массива списков смежности
int i; //инициализация каждого списка смежности как пустого
for (i = 0; i < V; ++i)
{
graph->array[i].head = NULL;
}
return graph;
}
void addedge(struct Graph* graph, int src, int dest)
{
// + ребро из src в построение. Новый узел + в список смежности. Список src. Узел + в начале
struct adjlistnode* newnode = newadjlistnode(dest);
newnode->next = graph->array[src].head;
graph->array[src].head = newnode;
newnode = newadjlistnode(src);
newnode->next = graph->array[dest].head;
graph->array[dest].head = newnode;
}
void printgraph(struct Graph* graph)
{
int v;
for (v = 0; v < graph->V; ++v)
{
struct adjlistnode* pCrawl = graph->array[v].head;
printf("\nСписок смежности вершины %d\n head", v);
while (pCrawl)
{
printf("-> %d", pCrawl->dest);
pCrawl = pCrawl->next;
}
printf("\n");
}
}