不同图邻接表的实现方法有两种:基于数组的邻接表和基于链表的邻接表。下面分别介绍它们的优缺点以及代码示例。
基于数组的邻接表:
class Graph:
def __init__(self, num_vertices):
self.num_vertices = num_vertices
self.adj_list = [[] for _ in range(num_vertices)]
def add_edge(self, src, dest):
self.adj_list[src].append(dest)
self.adj_list[dest].append(src)
基于链表的邻接表:
class Node:
def __init__(self, data):
self.data = data
self.next = None
class Graph:
def __init__(self, num_vertices):
self.num_vertices = num_vertices
self.adj_list = [None] * num_vertices
def add_edge(self, src, dest):
node = Node(dest)
node.next = self.adj_list[src]
self.adj_list[src] = node
node = Node(src)
node.next = self.adj_list[dest]
self.adj_list[dest] = node
使用哪种邻接表实现方法取决于图的特点和具体需求。如果图是稠密图且节点数量确定不超过给定值,则基于数组的邻接表是一个不错的选择。如果图是稀疏图或者节点数量不确定,则基于链表的邻接表更加适合。