You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

邻接矩阵类技术咨询:添加邻居查询、邻接判断方法及正确性验证

邻接矩阵类修正与方法实现

原代码问题修正

你的代码存在几处需要调整的问题:

  • Python类定义需用小写class,而非大写Class
  • __init__未初始化顶点数量self.size,导致__len__方法报错
  • add_edge中重复赋值self.adjMatrix[u][v] = 1,遗漏了对称位置self.adjMatrix[v][u] = 1
  • 未处理顶点索引超出矩阵范围的情况,添加/移除边时可能触发IndexError
  • Python3中print('{:4}'.format(val)),的写法无效,需调整为print('{:4}'.format(val), end='');单独的print需改为print()

完整修正代码+新增方法

下面是修正后的类,同时实现了你需要的两个方法:

  • get_neighbors(u):返回顶点u的所有邻居列表
  • is_adjacent(u, v):判断顶点u和v是否相邻
class AdjMatrix():
    # 初始化矩阵,需指定顶点总数
    def __init__(self, size):
        self.size = size
        # 创建size×size的零矩阵
        self.adjMatrix = [[0 for _ in range(size)] for _ in range(size)]

    # 添加边
    def add_edge(self, u, v):
        if u == v:
            print("不能添加顶点到自身的边")
            return
        # 校验顶点索引合法性
        if u < 0 or u >= self.size or v < 0 or v >= self.size:
            print("顶点索引超出范围")
            return
        self.adjMatrix[u][v] = 1
        self.adjMatrix[v][u] = 1

    # 移除边
    def remove_edge(self, u, v):
        if u < 0 or u >= self.size or v < 0 or v >= self.size:
            print("顶点索引超出范围")
            return
        if self.adjMatrix[u][v] == 0:
            print(f"顶点{u}和{v}之间没有边")
            return
        self.adjMatrix[u][v] = 0
        self.adjMatrix[v][u] = 0

    def __len__(self):
        return self.size

    # 获取顶点u的邻居列表
    def get_neighbors(self, u):
        if u < 0 or u >= self.size:
            print("顶点索引超出范围")
            return []
        # 遍历u对应的行,收集所有值为1的列索引(即邻居)
        neighbors = []
        for v in range(self.size):
            if self.adjMatrix[u][v] == 1:
                neighbors.append(v)
        return neighbors

    # 判断两个顶点是否相邻
    def is_adjacent(self, u, v):
        if u < 0 or u >= self.size or v < 0 or v >= self.size:
            print("顶点索引超出范围")
            return False
        # 邻接矩阵中1代表存在边,0代表不存在
        return self.adjMatrix[u][v] == 1

    # 打印矩阵
    def print_matrix(self):
        for row in self.adjMatrix:
            for val in row:
                print('{:4}'.format(val), end='')
            print()

方法说明

  1. get_neighbors(u):
    • 先校验顶点u的合法性,避免索引错误
    • 遍历顶点u对应的行,将所有值为1的列索引收集为邻居列表返回
  2. is_adjacent(u, v):
    • 先校验两个顶点的合法性
    • 直接返回邻接矩阵中adjMatrix[u][v]是否为1,即可判断是否相邻

使用示例

# 创建包含5个顶点的邻接矩阵
graph = AdjMatrix(5)
graph.add_edge(0, 1)
graph.add_edge(0, 2)
graph.add_edge(1, 3)

print("邻接矩阵:")
graph.print_matrix()

print("\n顶点0的邻居:", graph.get_neighbors(0))
print("顶点1和3是否相邻:", graph.is_adjacent(1, 3))
print("顶点0和3是否相邻:", graph.is_adjacent(0, 3))

输出结果:

邻接矩阵:
   0   1   1   0   0
   1   0   0   1   0
   1   0   0   0   0
   0   1   0   0   0
   0   0   0   0   0

顶点0的邻居: [1, 2]
顶点1和3是否相邻: True
顶点0和3是否相邻: False

内容的提问来源于stack exchange,提问作者Vincent Yang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 14:50:49