日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图的实现基本总结

發(fā)布時間:2024/9/15 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图的实现基本总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、采取鄰接矩陣方式實現(xiàn):

infinity = float("inf")class AdjGraphError(TypeError):passclass Graph: # basic graph class, using adjacent matrixdef __init__(self, mat, unconn = 0):vnum1 = len(mat)for x in mat:if len(x) != vnum1: # Check square matrixraise ValueError("Argument for 'GraphA' is bad.")self.mat = [mat[i][:] for i in range(vnum1)]self.unconn = unconnself.vnum = vnum1def vertex_num(self):return self.vnumdef add_edge(self, vi, vj, val = 1):assert 0 <= vi < self.vnum and 0 <= vj < self.vnumself.mat[vi][vj] = valdef add_vertex(self):raise AdjGraphError("Adj Matrix does not support 'add_vertex'")def get_edge(self, vi, vj):assert 0 <= vi < self.vnum and 0 <= vj < self.vnumreturn self.mat[vi][vj]def out_edges(self, vi):assert 0 <= vi < self.vnumreturn self._out_edges(self.mat, vi, self.unconn)@staticmethoddef _out_edges(mat, vi, unconn):edges = []row = mat[vi]for i in range(len(row)):if row[i] != unconn:edges.append((i, row[i]))return edgesdef __str__(self):return "[\n" + "\n".join(map(str, self.mat)) + "\n]"\+ "\nUnconnected: " + str(infinity)

2、采取鄰接表方式

class GraphA(Graph):def __init__(self, mat, unconn = 0):vnum1 = len(mat)for x in mat:if len(x) != vnum1: # Check square matrixraise ValueError("Argument for 'GraphA' is bad.")self.mat = [Graph._out_edges(mat, i, unconn)for i in range(vnum1)]self.vnum = vnum1self.unconn = unconndef add_vertex(self): # For new vertex, return an index allocatedself.mat.append([])self.vnum += 1return self.vnumdef add_edge(self, vi, vj, val = 1):assert 0 <= vi < self.vnum and 0 <= vj < self.vnumrow = self.mat[vi]for i in range(len(row)):if row[i][0] == vj: # replace a value for mat[vi][vj]self.mat[vi][i] = (vj, val)returnif row[i][0] > vj: breaki += 1 # adjust for the new entry at the endself.mat[vi].insert(i, (vj, val))def get_edge(self, vi, vj):assert 0 <= vi < self.vnum and 0 <= vj < self.vnumfor i, val in self.mat[vi]:if i == vj: return valreturn self.unconndef out_edges(self, vi):assert 0 <= vi < self.vnumreturn self.mat[vi]

3、運行結果:

if __name__ == '__main__':# g1 = Graph(10) # g2 = Graph(10, infinity) # print(str(g1)) # print(str(g2))gmat = [[0,0,3,4],[2,0,0,0],[4,1,0,0],[2,0,1,0]]g3 = GraphA(gmat, 0)print(str(g3))g3.add_edge(0,3,5)print(str(g3))g3.add_edge(1,3,6)print(str(g3))g3.add_edge(3,1,9)print(str(g3))runfile('/root/test/graph.py', wdir='/root/test') [ [(2, 3), (3, 4)] [(0, 2)] [(0, 4), (1, 1)] [(0, 2), (2, 1)] ] Unconnected: inf [ [(2, 3), (3, 5)] [(0, 2)] [(0, 4), (1, 1)] [(0, 2), (2, 1)] ] Unconnected: inf [ [(2, 3), (3, 5)] [(0, 2), (3, 6)] [(0, 4), (1, 1)] [(0, 2), (2, 1)] ] Unconnected: inf [ [(2, 3), (3, 5)] [(0, 2), (3, 6)] [(0, 4), (1, 1)] [(0, 2), (1, 9), (2, 1)] ] Unconnected: inf

總結

以上是生活随笔為你收集整理的图的实现基本总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。