最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用鄰接矩陣實現(xiàn)圖及Dijkstra算法問題

 更新時間:2022年12月16日 10:24:55   作者:科恩兄弟  
這篇文章主要介紹了Python使用鄰接矩陣實現(xiàn)圖及Dijkstra算法問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

使用鄰接矩陣實現(xiàn)圖及Dijkstra算法

# 鄰接矩陣實現(xiàn)無向圖 Dijkstra算法
inf = float("inf")


class Graph():
    def __init__(self, n):
        self.vertexn = n
        self.gType = 0
        self.vertexes = [inf]*n
        self.arcs = [self.vertexes*n]  # 鄰接矩陣
        self.visited = [False]*n  # 用于深度遍歷記錄結點的訪問情況

    def addvertex(self, v, i):
        self.vertexes[i] = v

    def addarcs(self, row, column, weight):
        self.arcs[row][column] = weight

    # 深度優(yōu)先遍歷
    def DFS(self, i):
        j = 0
        print("vertex:{}".format(self.vertexes[i]), end=" ")  # 先打印訪問到的節(jié)點
        self.visited[i] = True
        while j < self.vertexn:
            if (self.arcs[i][j] != inf) and (not self.visited[j]):
                print(self.arcs[i][j], end=" ")
                self.DFS(j)
            j += 1

    # 廣度優(yōu)先遍歷
    def BFS(self, k):
        self.visited = [False]*self.vertexn  # 訪問性重置
        q = []
        print("vertex:{}".format(self.vertexes[k]), end=" ")
        self.visited[k] = True
        q.append(k)
        while q != []:
            i = q.pop(0)
            for j in range(self.vertexn):
                if(self.arcs[i][j] != inf) and (not self.visited[j]):
                    print(self.arcs[i][j], end=" ")  # 父節(jié)點與子節(jié)點的距離
                    print("vertex:{}".format(self.vertexes[j]), end=" ")
                    self.visited[j] = True
                    q.append(j)

    # 最短路徑算法-Dijkstra 輸入點v0,找到所有點到v0的最短距離
    def Dijkstra(self, v0):
        # 初始化操作
        D = [inf]*self.vertexn  # 用于存放從頂點v0到v的最短路徑長度
        path = [None]*self.vertexn  # 用于存放從頂點v0到v的路徑
        final = [None]*self.vertexn  # 表示從v0到v的最短路徑是否找到最短路徑
        for i in range(self.vertexn):
            final[i] = False
            D[i] = self.arcs[v0][i]
            path[i] = ""  # 路徑先置空
            if D[i] < inf:
                path[i] = self.vertexes[i]  # 如果v0直接連到第i點,則路徑直接改為i
        D[v0] = 0
        final[v0] = True
        ###
        for i in range(1, self.vertexn):
            min = inf  # 找到離v0最近的頂點
            for k in range(self.vertexn):
                if(not final[k]) and (D[k] < min):
                    v = k
                    min = D[k]
            final[v] = True  # 最近的點找到,加入到已得最短路徑集合S中 此后的min將在處S以外的vertex中產(chǎn)生
            for k in range(self.vertexn):
                if(not final[k]) and (min+self.arcs[v][k] < D[k]):
                    # 如果最短的距離(v0-v)加上v到k的距離小于現(xiàn)存v0到k的距離
                    D[k] = min+self.arcs[v][k]
                    path[k] = path[v]+","+self.vertexes[k]
        return D, path


if __name__ == "__main__":
    g = Graph(5)
    g.vertexes = ["A", "B", "C", "D", "E"]
    g.arcs = [[inf, 60, 80, 30, inf], [60, inf, 40, 75, inf], [
        80, 40, inf, inf, 35], [30, 75, inf, inf, 45], [inf, inf, 35, 45, inf]]

    print("深度優(yōu)先遍歷:")
    g.DFS(0)
    print("\n廣度優(yōu)先遍歷:")
    g.BFS(0)
    print()

    print("Dijkstra搜索點到圖中各點的最短路徑:")
    D, path = g.Dijkstra(0)
    print(D)
    print(path)

將鄰接矩陣輸出成圖

利用networkx,numpy,matplotlib,將鄰接矩陣輸出為圖形。

1,自身確定一個鄰接矩陣,然后通過循環(huán)的方式添加變,然后輸出圖像

import networkx as nx
import matplotlib.pyplot as plt
import numpy as np
 
G = nx.Graph()
Matrix = np.array(
    [
        [0, 1, 1, 1, 1, 1, 0, 0],  # a
        [0, 0, 1, 0, 1, 0, 0, 0],  # b
        [0, 0, 0, 1, 0, 0, 0, 0],  # c
        [0, 0, 0, 0, 1, 0, 0, 0],  # d
        [0, 0, 0, 0, 0, 1, 0, 0],  # e
        [0, 0, 1, 0, 0, 0, 1, 1],  # f
        [0, 0, 0, 0, 0, 1, 0, 1],  # g
        [0, 0, 0, 0, 0, 1, 1, 0]  # h
    ]
)
for i in range(len(Matrix)):
    for j in range(len(Matrix)):
        G.add_edge(i, j)
 
nx.draw(G)
plt.show()
 

2,有向圖

G = nx.DiGraph()
G.add_node(1)
G.add_node(2)
G.add_nodes_from([3, 4, 5, 6])
G.add_cycle([1, 2, 3, 4])
G.add_edge(1, 3)
G.add_edges_from([(3, 5), (3, 6), (6, 7)])
nx.draw(G)
# plt.savefig("youxiangtu.png")
plt.show()

3,5節(jié)點完全圖

G = nx.complete_graph(5)
nx.draw(G)
plt.savefig("8nodes.png")
plt.show()

4,無向圖

G = nx.Graph()
G.add_node(1)
G.add_node(2)
G.add_nodes_from([3, 4, 5, 6])
G.add_cycle([1, 2, 3, 4])
G.add_edge(1, 3)
G.add_edges_from([(3, 5), (3, 6), (6, 7)])
nx.draw(G)
# plt.savefig("wuxiangtu.png")
plt.show()

5,顏色節(jié)點圖

G = nx.Graph()
G.add_edges_from([(1, 2), (1, 3), (1, 4), (1, 5), (4, 5), (4, 6), (5, 6)])
pos = nx.spring_layout(G)
 
colors = [1, 2, 3, 4, 5, 6]
nx.draw_networkx_nodes(G, pos, node_color=colors)
nx.draw_networkx_edges(G, pos)
 
plt.axis('off')
# plt.savefig("color_nodes.png")
plt.show()

將圖轉化為鄰接矩陣,再將鄰接矩陣轉化為圖,還有圖的集合表示,鄰接矩陣表示,圖形表示,這三種表現(xiàn)形式互相轉化的問題是一個值得學習的地方。

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 在Django下測試與調(diào)試REST API的方法詳解

    在Django下測試與調(diào)試REST API的方法詳解

    今天小編就為大家分享一篇在Django下測試與調(diào)試REST API的方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Pytest中skip和skipif的具體使用方法

    Pytest中skip和skipif的具體使用方法

    在實際的測試中,我們經(jīng)常會遇到需要跳過某些測試用例的情況,pytest提供了skip和ifskip來跳過測試.下面我們就來通過一些例子看看skip和ifskip具體如何使用吧,需要的朋友可以參考下
    2021-06-06
  • Python爬蟲XPath解析出亂碼的問題及解決

    Python爬蟲XPath解析出亂碼的問題及解決

    這篇文章主要介紹了Python爬蟲XPath解析出亂碼的問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 詳解python的集合set的函數(shù)

    詳解python的集合set的函數(shù)

    這篇文章主要為大家介紹了python的集合set的函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • np.unique()的具體使用

    np.unique()的具體使用

    本文主要介紹了np.unique()的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • Python中如何將Tqdm與Asyncio結合使用呢

    Python中如何將Tqdm與Asyncio結合使用呢

    這篇文章主要和大家詳細介紹了在Python中如何將Tqdm與Asyncio結合使用呢,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-05-05
  • python實現(xiàn)聚類算法原理

    python實現(xiàn)聚類算法原理

    這篇文章主要為大家詳細介紹了python實現(xiàn)聚類算法原理,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Python中subprocess的簡單使用示例

    Python中subprocess的簡單使用示例

    這篇文章主要介紹了Python中subprocess的簡單使用示例,是Python進程方面處理的相關重要知識,需要的朋友可以參考下
    2015-07-07
  • linux系統(tǒng)使用python監(jiān)測網(wǎng)絡接口獲取網(wǎng)絡的輸入輸出

    linux系統(tǒng)使用python監(jiān)測網(wǎng)絡接口獲取網(wǎng)絡的輸入輸出

    這篇文章主要介紹了linux系統(tǒng)使用python監(jiān)測網(wǎng)絡接口獲取網(wǎng)絡的輸入輸出信息,大家參考使用吧
    2014-01-01
  • 運行django項目指定IP和端口的方法

    運行django項目指定IP和端口的方法

    今天小編就為大家分享一篇運行django項目指定IP和端口的方法。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05

最新評論

阳新县| 东港市| 泾川县| 恩施市| 英德市| 长子县| 永嘉县| 昌邑市| 乌鲁木齐县| 阿尔山市| 墨竹工卡县| 泸西县| 朔州市| 商南县| 马龙县| 梨树县| 北票市| 岐山县| 阳泉市| 灵寿县| 湖北省| 堆龙德庆县| 翁源县| 鹿邑县| 奉化市| 焉耆| 定陶县| 三河市| 巴中市| 金寨县| 阜平县| 龙陵县| 忻州市| 合作市| 塔城市| 克东县| 城步| 上栗县| 万盛区| 长岛县| 康定县|