BFS中特定节点邻居查找:search方法逻辑实现求助
解决节点邻居数量统计问题
我来帮你梳理search方法的实现逻辑,搞定这个节点邻居数统计的问题。
问题先拆清楚
先明确你输入的结构(拿测试用例举例):
- 第一个数值
6是节点总数 - 接下来的
India Pakistan Nepal Bhutan Bangladesh China是节点名称列表 - 之后的36个数字是6x6的邻接矩阵:
1代表两个节点互为邻居,0代表无连接,每行对应一个节点和其他节点的关系 - 最后一个
Bhutan是要查询的目标节点
核心实现思路
- 解析输入:把输入内容拆分出节点数、节点列表、邻接矩阵、目标节点
- 定位节点位置:找到目标节点在列表中的索引
- 统计邻居数:遍历邻接矩阵中该节点对应的行,数里面
1的个数(如果是无向图,这个统计就完全准确;如果是有向图,你可以按需改成统计入度/出度)
Python 示例代码实现
def search(node_list, adjacency_matrix, target_node): # 找到目标节点在列表中的索引 try: node_idx = node_list.index(target_node) except ValueError: return 0 # 节点不存在时返回0,也可以根据需求抛出异常 # 统计对应行里1的数量,就是邻居数 neighbor_count = sum(adjacency_matrix[node_idx]) return neighbor_count def main(): # 这里模拟输入,实际可以直接从标准输入读取 input_content = "6 India Pakistan Nepal Bhutan Bangladesh China 0 1 1 1 1 1 1 0 0 0 0 0 1 0 0 1 0 1 1 0 1 0 0 1 1 0 0 0 0 0 1 0 1 1 0 0 Bhutan".split() ptr = 0 node_num = int(input_content[ptr]) ptr += 1 # 提取节点列表 nodes = input_content[ptr:ptr+node_num] ptr += node_num # 构建邻接矩阵 adj_matrix = [] for _ in range(node_num): row = list(map(int, input_content[ptr:ptr+node_num])) adj_matrix.append(row) ptr += node_num target = input_content[ptr] # 调用search方法并输出结果 print(search(nodes, adj_matrix, target)) if __name__ == "__main__": main()
测试用例验证
你的测试用例里,Bhutan在节点列表中的索引是3(从0开始计数),对应的邻接矩阵行是[1, 0, 1, 0, 0, 1],里面刚好3个1,运行代码后输出3,完全符合期望。
额外注意点
- 如果是有向图,要统计入度的话,就改成统计邻接矩阵中对应列的
1数量就行 - 可以根据业务需求调整节点不存在时的处理逻辑,比如抛出提示而不是返回0
内容的提问来源于stack exchange,提问作者Ashish yadav
相关产品推荐
相关产品推荐

