邻接矩阵的作用就是可以记录边与边之间的关系,如果是无向图那么矩阵存储的就是顶点的度;如果是有向图那么存储的就是出度。邻接矩阵的优点是可以快速达到两点之间边的关系,但是对于图中有多少条边,确定需要较多的时间代价。
邻接矩阵题目
这道题主要还是一个思想问题,就是
无向图上离任一点最远的点肯定在 无向图的最长路上–并且是端点
任意选择一点,然后得到离该点最远的点必定在最长的路(直径)上–端点。然后从该点出发得到的最长的路就是直径。
# class Interval:
# def __init__(self, a=0, b=0):
# self.start = a
# self.end = b
# 树的直径
# @param n int整型 树的节点个数
# @param Tree_edge Interval类一维数组 树的边
# @param Edge_value int整型一维数组 边的权值
# @return int整型
class Solution:
def solve(self , n , Tree_edge , Edge_value ):
if not Tree_edge:
return 0
record = {}
# 邻接表
for i in range(len(Tree_edge)):
if Tree_edge[i].start not in record:
record[Tree_edge[i].start] = {Tree_edge[i].end:Edge_value[i]}
else:
record[Tree_edge[i].start][Tree_edge[i].end] = Edge_value[i]
if Tree_edge[i].end not in record:
record[Tree_edge[i].end] = {Tree_edge[i].start:Edge_value[i]}
else:
record[Tree_edge[i].end][Tree_edge[i].start] = Edge_value[i]
self.longest = 0
self.end = None
def dfs(root, num, pre):
buffer = record[root]
for i in buffer:
if i == pre:
continue
dfs(i, num+buffer[i], root)
if num > self.longest:
self.end = root
self.longest = num
dfs(Tree_edge[0].start, 0, None)
self.longest = 0
dfs(self.end, 0, None)
return self.longest
邻接表是顺序分配与链式分配相结合的存储方法。共有n个顶点,对每个顶点建立一个单链表,再把单链表都序号组合起来,就形成了邻接表。