这段代码实现了一个简单的社交网络类 SocialNetwork
,并提供了一些基本操作,如添加用户、用户之间的关注关系、获取关注者和正在关注的用户等功能。
总的来说,这段代码实现了一个简单的社交网络,提供了基本的用户管理和关系建立功能,并且能够将社交网络表示为无向图的邻接矩阵。
以下是对代码的简单总结归纳:
-
SocialNetwork 类:
- 初始化方法
__init__()
创建了一个空的邻接表adj_list
,用于存储用户之间的关系。
- 初始化方法
-
add_user() 方法:
- 添加一个新用户到社交网络中,如果用户不存在的话。
-
follow() 方法:
- 用户之间的关注关系,添加用户之间的双向关注关系。
-
get_followers() 方法:
- 获取关注指定用户的所有用户。
-
get_following() 方法:
- 获取一个用户正在关注的所有用户。
-
to_adj_matrix() 方法:
- 将社交网络转换为无向图的邻接矩阵表示。
-
使用示例:
- 创建了一个
SocialNetwork
对象net
,添加了几个用户并建立了关注关系。 - 打印了指定用户的关注者和被关注者。
- 打印了社交网络的邻接矩阵表示。
- 创建了一个
class SocialNetwork:def __init__(self):self.adj_list = {} # 使用字典来实现邻接表def add_user(self, user):"""添加一个新用户,如果用户不存在的话"""if user not in self.adj_list:self.adj_list[user] = []def follow(self, user1, user2):"""用户1关注用户2"""if user1 in self.adj_list and user2 in self.adj_list:self.adj_list[user1].append(user2)self.adj_list[user2].append(user1) # 无向图,需要同时添加双向关系else:print(f"Make sure both {user1} and {user2} are in the network")def get_followers(self, user):"""获取关注指定用户的所有用户"""followers = [u for u, v in self.adj_list.items() if user in v]return followersdef get_following(self, user):"""获取一个用户正在关注的所有用户"""if user in self.adj_list:return self.adj_list[user]else:return []def to_adj_matrix(self):"""将社交网络转换为无向图的邻接矩阵表示"""users = list(self.adj_list.keys())n = len(users)adj_matrix = [[0] * n for _ in range(n)] # 初始化邻接矩阵for i in range(n):for j in range(n):if users[j] in self.adj_list[users[i]]:adj_matrix[i][j] = 1return adj_matrix# 使用
net = SocialNetwork()
net.add_user("Alice")
net.add_user("Bob")
net.add_user("Charlie")net.follow("Alice", "Bob")
net.follow("Alice", "Charlie")
net.follow("Bob", "Charlie")print("Alice is following:", net.get_following("Alice"))
print("Charlie is followed by:", net.get_followers("Charlie"))print("\n无向图的邻接矩阵表示:")
adj_matrix = net.to_adj_matrix()
for row in adj_matrix:print(row)
Alice is following: ['Bob', 'Charlie']
Charlie is followed by: ['Alice', 'Bob']
无向图的邻接矩阵表示:
[0, 1, 1]
[1, 0, 1]
[1, 1, 0]
[Finished in 562ms]