# _*_ encoding:utf-8 _*_
"""
图
"""
from random import randint
import time
import copy
import Queue
class DenseGraph(object):
"""稠密图 - 邻接矩阵"""
def __init__(self, n, directed):
self.n = n # 图中的点数
self.m = 0 # 图中的边数
self.directed = directed # bool值,表示是否为有向图
self.g = [[False for _ in range(n)] for _ in range(n)] # 矩阵初始化都为False的二维矩阵
def V(self):
# 返回图中点数
return self.n
def E(self):
# 返回图中边数
return self.m
def addEdge(self, v, w):
# v和w中增加一条边,v和w都是[0,n-1]区间
if v >= 0 and v < n and w >= 0 and w < n:
if self.hasEdge(v, w):
return None
self.g[v][w] = True
if not self.directed:
self.g[w][v] = True
self.m += 1
def hasEdge(self, v, w):
# v和w之间是否有边,v和w都是[0,n-1]区间
if v >= 0 and v < n and w >= 0 and w < n:
return self.g[v][w]
class adjIterator(object):
"""相邻节点迭代器"""
def __init__(self, graph, v):
self.G = graph # 需要遍历的图
self.v = v # 遍历v节点相邻的边
self.index = 0 # 遍历的索引
def __iter__(self):
return self
def next(self):
while self.index < self.G.V():
【算法——Python实现】无权图(稠密图、稀疏图)及图的遍历
最新推荐文章于 2022-05-27 11:08:11 发布
