图的存储结构实现:邻接表


title: 图的存储结构实现:邻接表
date: 2019-09-02 19:49:22
tags: python,数据结构
categories: 计算机理论

邻接表实现

20190825160305

数据格式如图所示:

graph = {
    
    
    "A": {
    
    "B": 5, "C": 1},
    "B": {
    
    "A": 5, "C": 2, "D": 1},
    "C": {
    
    "A": 1, "B": 2, "D": 4, "E": 8},
    "D": {
    
    "B": 1, "C": 4, "E": 3, "F": 6},
    "E": {
    
    "C": 8, "D": 3},
    "F": {
    
    "D": 6},
}

如上图所示,该类是一个无向网,如果需要改成有向网,只需要更改add_edge这个方法

新建一个GraphAL.py文件,在文件中添加:

# 邻接表实现无向网(图)(字典形式)
class GraphAL:
    def __init__(self, graph={
    
    }):
        self._graph = graph
        self._vnum = len(graph)

    def _invalid(self, vertex):
        return self._graph.__contains__(vertex)

    def add_vertex(self, vertex):
        if self._invalid(vertex):
            raise GraphError("添加顶点失败,已经有该顶点")
        self._graph[vertex] = {
    
    }
        self._vnum += 1

    def add_edge(self, vi, vj, val):
        if not self._invalid(vi) or not self._invalid(vj):
            raise GraphError("不存在" + vi + "或者" + vj + "这样的顶点")
        self._graph[vi].update({
    
    vj: val})
        self._graph[vj].update({
    
    vi: val})

    def get_edge(self, vi, vj):
        if not self._invalid(vi) or not self._invalid(vj):
            raise GraphError("不存在" + vi + "或者" + vj + "这样的顶点")
        return self._graph[vi][vj]

    def get_vertexNum(self):
        return self._graph.__len__()

    # 在无向网(图)中是边,有向网(图)是出边,取决于数据
    def out_edge(self, vertex):
        if not self._invalid(vertex):
            raise GraphError("不存在" + vertex + "这样的顶点")
        return self._graph[vertex]
    
    

你也可以不传入图的参数,会默认创建一个新图。通过add_vertexadd_edge即可完成图的构建。

猜你喜欢

转载自blog.csdn.net/weixin_41154636/article/details/100526475