编程语言
首页 > 编程语言> > Python数据结构与算法(7)--图及其算法

Python数据结构与算法(7)--图及其算法

作者:互联网

图及其算法

1.图的基本概念及相关术语

  1. 图Graph的概念
  1. 图的术语
  1. 图的定义
  1. 路径Path
  1. 环Cycle

2.图抽象数据类型及Python实现

  1. 抽象数据类型:ADT Graph
  1. ADT Graph的实现方法有两种主要形式:
  1. 邻接矩阵Adjacency Matrix
  1. 邻接表Adjacency List
  1. 图抽象数据类型的Python实现
# 顶点Vertex类
# Vertex包含了顶点信息,以及顶点连接边
class Vertex:
    def __init__(self, key):
        self.id = key
        self.connectedTo = {}
    def addNeighbor(self , nbr, weight=0):
        self.connectedTo[nbr] = weight
    def __str__(self):
        return str(self.id) + ' connectedTo: ' \
            + str([x.id for x in self.connectedTo])
    def getConnections(self):
        return self.connectedTo.keys()
    def getId(self):
        return self.id
    def getWeight(self,nbr):
        return self.connectedTo[nbr]
# Graph保存了包含所有顶点的主表
class Graph:
    def __init__(self):
        self.vertList = {}
        self.numVertices = 0
    def addVertex(self,key):
        self.numVertices = self.numVertices + 1
        newVertex = Vertex(key)
        self. vertList[key] = newVertex
        return newVertex
    def getVertex(self,n):  #新增顶点
        if n in self.vertList:
            return self.vertList[n]
        else:
            return None
    def __contains__(self,n):
        return n in self.vertList

    def addEdge(self,f,t,cost=0):
        if f not in self.vertList:
            nv = self.addVertex(f) # 不存在的顶点先添加
        if t not in self.vertList:
            nv = self.addVertex(t)
        self.vertList[f].addNeighbor(self.vertList[t], cost)
    def getVertices(self):
        return self.vertList.keys()
    def __iter__(self):
        return iter(self.vertList.values())



g = Graph()
for i in range(6):
    g.addVertex(i)
print(g.vertList)

g.addEdge(0,1,5)
g.addEdge(0,5,2)
g.addEdge(1,2,4)
g.addEdge(2,3,9)
g.addEdge(3,4,7)
g.addEdge(3,5,3)
g.addEdge(4,0,1)
g.addEdge(5,4,8)
g.addEdge(5,2,1)
for v in g:
    for w in v.getConnections():
        print("(%s,%s)" % (v.getId(), w.getId()))

标签:__,vertList,Python,self,--,算法,顶点,addEdge,def
来源: https://blog.csdn.net/li520_fei/article/details/121723283