先决条件:链表、图数据结构
在本文中,在给定的邻接表表示中讨论了添加和删除顶点。
让有向图为:
该图可以在邻接表表示中表示为:
它是一种链表表示,其中链表的头部是图中的一个顶点,所有连接的节点都是第一个顶点所连接的顶点。例如,从图中可以清楚的是顶点0连接到顶点4,3和1。同样在邻接表(或链表)表示中表示。
方法:
- 这个想法是将图表示为一个链表列表,其中链表的头部是顶点,所有连接的链表都是它所连接的顶点。
- 在图中添加一个顶点:要在图中添加一个顶点,可以将邻接表迭代到需要插入的地方,并可以使用链表实现创建新节点。例如,如果需要在顶点 2 和顶点 3 之间添加 5,使得顶点 3 指向顶点 5,顶点 5 指向顶点 2,则在顶点 5 和顶点 3 之间创建一条新边,并从顶点 5 和顶点 2。 添加顶点后,邻接表变为:
- 删除图中的顶点:要删除图中的顶点,请遍历每个顶点的列表(如果边存在或不存在)。如果边存在,则以与在链表中执行删除相同的方式删除顶点。例如,如果从列表中删除顶点 4,邻接列表将转换为以下列表:
下面是上述方法的实现:
# Python implementation of the above approach # Implementing Linked List representation class AdjNode(object): def __init__(self, data): self.vertex = data self.next = None # Adjacency List representation class AdjList(object): def __init__(self, vertices): self.v = vertices self.graph =[None]*self.v # Function to add an edge from a source vertex # to a destination vertex def addedge(self, source, destination): node = AdjNode(destination) node.next = self.graph self.graph= node # Function to call the above function. def addvertex(self, vk, source, destination): graph.addedge(source, vk) graph.addedge(vk, destination) # Function to print the graph def print_graph(self): for i in range(self.v): print(i, end ="") temp = self.graph[i] while temp: print("->", temp.vertex, end ="") temp = temp.next print("\n") # Function to delete a vertex def delvertex(self, k): # Iterating through all the vertices of the graph for i in range(self.v): temp = self.graph[i] if i == k: while temp: self.graph[i]= temp.next temp = self.graph[i] # Delete the vertex # using linked list concept if temp: if temp.vertex == k: self.graph[i]= temp.next temp = None while temp: if temp.vertex == k: break prev = temp temp = temp.next if temp == None: continue prev.next = temp.next temp = None # Driver code if __name__ == "__main__": V = 6 graph = AdjList(V) graph.addedge(0, 1) graph.addedge(0, 3) graph.addedge(0, 4) graph.addedge(1, 2) graph.addedge(3, 2) graph.addedge(4, 3) print("Initial adjacency list") graph.print_graph() # Add vertex graph.addvertex(5, 3, 2) print("Adjacency list after adding vertex") graph.print_graph() # Delete vertex graph.delvertex(4) print("Adjacency list after deleting vertex") graph.print_graph()
输出:Initial adjacency list 0-> 4-> 3-> 1 1-> 2 2 3-> 2 4-> 3 5 Adjacency list after adding vertex 0-> 4-> 3-> 1 1-> 2 2 3-> 5-> 2 4-> 3 5-> 2 Adjacency list after deleting vertex 0-> 3-> 1 1-> 2 2 3-> 5-> 2 4 5-> 2
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。