<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                > 引用:[https://blog.csdn.net/zjw\_python/article/details/85158998](https://blog.csdn.net/zjw_python/article/details/85158998) [toc] # 圖的存儲 存儲分為以下方法: - 鄰接矩陣 - 鄰接表 - 十字鏈表 - 鄰接多重表 ## 鄰接矩陣 用 `二維數組` 的方式來存儲圖結構。 - 無向圖 ![](https://img.kancloud.cn/76/eb/76eb4d4eca469db8f6400f86e7761736_492x718.png) 缺點: 1. 太浪費空間 2. 圖中的頂點經常是動態的,需要添加和刪除,二維數組尺寸是固定的不方便 - 有向圖 ![](https://img.kancloud.cn/bc/41/bc4174129bba3418a50bc147445bfd17_472x718.png) - 有向帶權圖 ![](https://img.kancloud.cn/7e/45/7e45162cd53057c6c51893372e24aa9c_1246x422.png) ## 鄰接表 `數組+鏈表` 進行存儲。 圖的每一個頂點都是一個頭節點,其后連接著該頂點能夠直接達到的相鄰頂點。 ![](https://img.kancloud.cn/ff/a6/ffa66da7e9b5a08d1f1f4842a6d32942_832x330.png) ## 鄰接多重表 鄰接多重表是 `無向圖` 的一種存儲方式。 ![](https://img.kancloud.cn/47/67/47670f4d3f5a577a10e2a1dcf56cdefd_1462x548.png) ## 逆鄰接表 每一個頂點作為鏈表的頭節點,后繼節點所存儲的是 `能夠直接達到該頂點` 的相鄰頂點。 ![](https://img.kancloud.cn/13/c2/13c2f1d9f1d510dc148ca05d65779fc4_1542x596.png) ## 十字鏈表 每一個頂點作為鏈表的頭節點,都可以有兩個鏈: 1. 所有這個節點可以到達的節點 2. 所有可以到達該節點的節點 ![](https://img.kancloud.cn/3d/bd/3dbd8dca0cfb3defc23c4bb517cef377_1598x1412.png) # 代碼實現-鄰接表 ~~~ class Graph { constructor () { this.vertices = []; // 用來存放圖中的頂點 this.adjList = new Set(); // 用來存放圖中的邊 } // 向圖中添加一個新頂點 addVertex (v) { if (!this.vertices.includes(v)) { this.vertices.push(v); this.adjList.set(v, []); } } // 向圖中添加a和b兩個頂點之間的邊 addEdge (a, b) { // 如果圖中沒有頂點a,先添加頂點a if (!this.adjList.has(a)) { this.addVertex(a); } // 如果圖中沒有頂點b,先添加頂點b if (!this.adjList.has(b)) { this.addVertex(b); } this.adjList.get(a).push(b); // 在頂點a中添加指向頂點b的邊 this.adjList.get(b).push(a); // 在頂點b中添加指向頂點a的邊 } // 獲取圖的vertices getVertices () { return this.vertices; } // 獲取圖中的adjList getAdjList () { return this.adjList; } toString() { let s = ''; this.vertices.forEach((v) => { s += `${v} -> `; this.adjList.get(v).forEach((n) => { s += `${n} `; }); s += '\n'; }); return s; } } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看