This commit is contained in:
krahets
2023-02-15 04:33:31 +08:00
parent c2b291aa5f
commit 6fce2aa052
5 changed files with 8 additions and 9 deletions

View File

@@ -2202,13 +2202,12 @@
</div>
</div>
</div>
<p>基于邻接表实现图的代码如下所示。</p>
<div class="admonition question">
<p class="admonition-title">为什么需要使用顶点类 <code>Vertex</code> </p>
<p>如果我们直接通过顶点值来区分不同顶点那么值重复的顶点将无法被区分。
如果建立一个顶点列表,用索引来区分不同顶点,那么假设我们想要删除索引为 <code>i</code> 的顶点,则需要遍历整个邻接表,将其中 <span class="arithmatex">\(&gt; i\)</span> 的索引全部执行 <span class="arithmatex">\(-1\)</span> ,这样的操作是比较耗时的。
因此,通过引入顶点类 <code>Vertex</code> ,每个顶点都是唯一的对象,这样在删除操作时就无需改动其余顶点了。</p>
</div>
<p>基于邻接表实现图的代码如下所示。细心的同学可能注意到,<strong>我们在邻接表中使用 <code>Vertex</code> 结点类来表示顶点</strong>,这样做的原因是:</p>
<ul>
<li>如果我们选择通过顶点值来区分不同顶点,那么值重复的顶点将无法被区分。</li>
<li>如果类似邻接矩阵那样,使用顶点列表索引来区分不同顶点那么,假设我们想要删除索引为 <span class="arithmatex">\(i\)</span> 的顶点,则需要遍历整个邻接表,将其中 <span class="arithmatex">\(&gt; i\)</span> 的索引全部执行 <span class="arithmatex">\(-1\)</span> ,这样操作效率太低。</li>
<li>因此我们考虑引入顶点类 <code>Vertex</code> ,使得每个顶点都是唯一的对象,此时删除顶点时就无需改动其余顶点了。</li>
</ul>
<div class="tabbed-set tabbed-alternate" data-tabs="4:10"><input checked="checked" id="__tabbed_4_1" name="__tabbed_4" type="radio" /><input id="__tabbed_4_2" name="__tabbed_4" type="radio" /><input id="__tabbed_4_3" name="__tabbed_4" type="radio" /><input id="__tabbed_4_4" name="__tabbed_4" type="radio" /><input id="__tabbed_4_5" name="__tabbed_4" type="radio" /><input id="__tabbed_4_6" name="__tabbed_4" type="radio" /><input id="__tabbed_4_7" name="__tabbed_4" type="radio" /><input id="__tabbed_4_8" name="__tabbed_4" type="radio" /><input id="__tabbed_4_9" name="__tabbed_4" type="radio" /><input id="__tabbed_4_10" name="__tabbed_4" type="radio" /><div class="tabbed-labels"><label for="__tabbed_4_1">Java</label><label for="__tabbed_4_2">C++</label><label for="__tabbed_4_3">Python</label><label for="__tabbed_4_4">Go</label><label for="__tabbed_4_5">JavaScript</label><label for="__tabbed_4_6">TypeScript</label><label for="__tabbed_4_7">C</label><label for="__tabbed_4_8">C#</label><label for="__tabbed_4_9">Swift</label><label for="__tabbed_4_10">Zig</label></div>
<div class="tabbed-content">
<div class="tabbed-block">