mirror of
https://github.com/krahets/hello-algo.git
synced 2026-04-14 18:31:08 +08:00
deploy
This commit is contained in:
@@ -4526,7 +4526,7 @@
|
||||
<a id="__codelineno-9-39" name="__codelineno-9-39" href="#__codelineno-9-39"></a><span class="w"> </span><span class="c1">// 在邻接矩阵中添加一行</span>
|
||||
<a id="__codelineno-9-40" name="__codelineno-9-40" href="#__codelineno-9-40"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">adj_mat</span><span class="p">.</span><span class="n">push</span><span class="p">(</span><span class="fm">vec!</span><span class="p">[</span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">n</span><span class="p">]);</span>
|
||||
<a id="__codelineno-9-41" name="__codelineno-9-41" href="#__codelineno-9-41"></a><span class="w"> </span><span class="c1">// 在邻接矩阵中添加一列</span>
|
||||
<a id="__codelineno-9-42" name="__codelineno-9-42" href="#__codelineno-9-42"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">row</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="o">&</span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">adj_mat</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-9-42" name="__codelineno-9-42" href="#__codelineno-9-42"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">row</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">adj_mat</span><span class="p">.</span><span class="n">iter_mut</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-9-43" name="__codelineno-9-43" href="#__codelineno-9-43"></a><span class="w"> </span><span class="n">row</span><span class="p">.</span><span class="n">push</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
|
||||
<a id="__codelineno-9-44" name="__codelineno-9-44" href="#__codelineno-9-44"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-9-45" name="__codelineno-9-45" href="#__codelineno-9-45"></a><span class="w"> </span><span class="p">}</span>
|
||||
@@ -4541,7 +4541,7 @@
|
||||
<a id="__codelineno-9-54" name="__codelineno-9-54" href="#__codelineno-9-54"></a><span class="w"> </span><span class="c1">// 在邻接矩阵中删除索引 index 的行</span>
|
||||
<a id="__codelineno-9-55" name="__codelineno-9-55" href="#__codelineno-9-55"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">adj_mat</span><span class="p">.</span><span class="n">remove</span><span class="p">(</span><span class="n">index</span><span class="p">);</span>
|
||||
<a id="__codelineno-9-56" name="__codelineno-9-56" href="#__codelineno-9-56"></a><span class="w"> </span><span class="c1">// 在邻接矩阵中删除索引 index 的列</span>
|
||||
<a id="__codelineno-9-57" name="__codelineno-9-57" href="#__codelineno-9-57"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">row</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="o">&</span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">adj_mat</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-9-57" name="__codelineno-9-57" href="#__codelineno-9-57"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">row</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">adj_mat</span><span class="p">.</span><span class="n">iter_mut</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-9-58" name="__codelineno-9-58" href="#__codelineno-9-58"></a><span class="w"> </span><span class="n">row</span><span class="p">.</span><span class="n">remove</span><span class="p">(</span><span class="n">index</span><span class="p">);</span>
|
||||
<a id="__codelineno-9-59" name="__codelineno-9-59" href="#__codelineno-9-59"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-9-60" name="__codelineno-9-60" href="#__codelineno-9-60"></a><span class="w"> </span><span class="p">}</span>
|
||||
@@ -5604,7 +5604,7 @@
|
||||
<div class="highlight"><span class="filename">graph_adjacency_list.rs</span><pre><span></span><code><a id="__codelineno-23-1" name="__codelineno-23-1" href="#__codelineno-23-1"></a><span class="cm">/* 基于邻接表实现的无向图类型 */</span>
|
||||
<a id="__codelineno-23-2" name="__codelineno-23-2" href="#__codelineno-23-2"></a><span class="k">pub</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">GraphAdjList</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-23-3" name="__codelineno-23-3" href="#__codelineno-23-3"></a><span class="w"> </span><span class="c1">// 邻接表,key:顶点,value:该顶点的所有邻接顶点</span>
|
||||
<a id="__codelineno-23-4" name="__codelineno-23-4" href="#__codelineno-23-4"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="n">adj_list</span><span class="p">:</span><span class="w"> </span><span class="nc">HashMap</span><span class="o"><</span><span class="n">Vertex</span><span class="p">,</span><span class="w"> </span><span class="nb">Vec</span><span class="o"><</span><span class="n">Vertex</span><span class="o">>></span><span class="p">,</span>
|
||||
<a id="__codelineno-23-4" name="__codelineno-23-4" href="#__codelineno-23-4"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="n">adj_list</span><span class="p">:</span><span class="w"> </span><span class="nc">HashMap</span><span class="o"><</span><span class="n">Vertex</span><span class="p">,</span><span class="w"> </span><span class="nb">Vec</span><span class="o"><</span><span class="n">Vertex</span><span class="o">>></span><span class="p">,</span><span class="w"> </span><span class="c1">// maybe HashSet<Vertex> for value part is better?</span>
|
||||
<a id="__codelineno-23-5" name="__codelineno-23-5" href="#__codelineno-23-5"></a><span class="p">}</span>
|
||||
<a id="__codelineno-23-6" name="__codelineno-23-6" href="#__codelineno-23-6"></a>
|
||||
<a id="__codelineno-23-7" name="__codelineno-23-7" href="#__codelineno-23-7"></a><span class="k">impl</span><span class="w"> </span><span class="n">GraphAdjList</span><span class="w"> </span><span class="p">{</span>
|
||||
@@ -5631,65 +5631,58 @@
|
||||
<a id="__codelineno-23-28" name="__codelineno-23-28" href="#__codelineno-23-28"></a>
|
||||
<a id="__codelineno-23-29" name="__codelineno-23-29" href="#__codelineno-23-29"></a><span class="w"> </span><span class="cm">/* 添加边 */</span>
|
||||
<a id="__codelineno-23-30" name="__codelineno-23-30" href="#__codelineno-23-30"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="nf">add_edge</span><span class="p">(</span><span class="o">&</span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">vet1</span><span class="p">:</span><span class="w"> </span><span class="nc">Vertex</span><span class="p">,</span><span class="w"> </span><span class="n">vet2</span><span class="p">:</span><span class="w"> </span><span class="nc">Vertex</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-23-31" name="__codelineno-23-31" href="#__codelineno-23-31"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="o">!</span><span class="bp">self</span><span class="p">.</span><span class="n">adj_list</span><span class="p">.</span><span class="n">contains_key</span><span class="p">(</span><span class="o">&</span><span class="n">vet1</span><span class="p">)</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="o">!</span><span class="bp">self</span><span class="p">.</span><span class="n">adj_list</span><span class="p">.</span><span class="n">contains_key</span><span class="p">(</span><span class="o">&</span><span class="n">vet2</span><span class="p">)</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">vet1</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">vet2</span>
|
||||
<a id="__codelineno-23-32" name="__codelineno-23-32" href="#__codelineno-23-32"></a><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-23-33" name="__codelineno-23-33" href="#__codelineno-23-33"></a><span class="w"> </span><span class="fm">panic!</span><span class="p">(</span><span class="s">"value error"</span><span class="p">);</span>
|
||||
<a id="__codelineno-23-34" name="__codelineno-23-34" href="#__codelineno-23-34"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-23-35" name="__codelineno-23-35" href="#__codelineno-23-35"></a><span class="w"> </span><span class="c1">// 添加边 vet1 - vet2</span>
|
||||
<a id="__codelineno-23-36" name="__codelineno-23-36" href="#__codelineno-23-36"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">adj_list</span><span class="p">.</span><span class="n">get_mut</span><span class="p">(</span><span class="o">&</span><span class="n">vet1</span><span class="p">).</span><span class="n">unwrap</span><span class="p">().</span><span class="n">push</span><span class="p">(</span><span class="n">vet2</span><span class="p">);</span>
|
||||
<a id="__codelineno-23-37" name="__codelineno-23-37" href="#__codelineno-23-37"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">adj_list</span><span class="p">.</span><span class="n">get_mut</span><span class="p">(</span><span class="o">&</span><span class="n">vet2</span><span class="p">).</span><span class="n">unwrap</span><span class="p">().</span><span class="n">push</span><span class="p">(</span><span class="n">vet1</span><span class="p">);</span>
|
||||
<a id="__codelineno-23-38" name="__codelineno-23-38" href="#__codelineno-23-38"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-23-39" name="__codelineno-23-39" href="#__codelineno-23-39"></a>
|
||||
<a id="__codelineno-23-40" name="__codelineno-23-40" href="#__codelineno-23-40"></a><span class="w"> </span><span class="cm">/* 删除边 */</span>
|
||||
<a id="__codelineno-23-41" name="__codelineno-23-41" href="#__codelineno-23-41"></a><span class="w"> </span><span class="cp">#[allow(unused)]</span>
|
||||
<a id="__codelineno-23-42" name="__codelineno-23-42" href="#__codelineno-23-42"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="nf">remove_edge</span><span class="p">(</span><span class="o">&</span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">vet1</span><span class="p">:</span><span class="w"> </span><span class="nc">Vertex</span><span class="p">,</span><span class="w"> </span><span class="n">vet2</span><span class="p">:</span><span class="w"> </span><span class="nc">Vertex</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-23-43" name="__codelineno-23-43" href="#__codelineno-23-43"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="o">!</span><span class="bp">self</span><span class="p">.</span><span class="n">adj_list</span><span class="p">.</span><span class="n">contains_key</span><span class="p">(</span><span class="o">&</span><span class="n">vet1</span><span class="p">)</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="o">!</span><span class="bp">self</span><span class="p">.</span><span class="n">adj_list</span><span class="p">.</span><span class="n">contains_key</span><span class="p">(</span><span class="o">&</span><span class="n">vet2</span><span class="p">)</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">vet1</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">vet2</span>
|
||||
<a id="__codelineno-23-44" name="__codelineno-23-44" href="#__codelineno-23-44"></a><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-23-45" name="__codelineno-23-45" href="#__codelineno-23-45"></a><span class="w"> </span><span class="fm">panic!</span><span class="p">(</span><span class="s">"value error"</span><span class="p">);</span>
|
||||
<a id="__codelineno-23-46" name="__codelineno-23-46" href="#__codelineno-23-46"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-23-47" name="__codelineno-23-47" href="#__codelineno-23-47"></a><span class="w"> </span><span class="c1">// 删除边 vet1 - vet2</span>
|
||||
<a id="__codelineno-23-48" name="__codelineno-23-48" href="#__codelineno-23-48"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">adj_list</span>
|
||||
<a id="__codelineno-23-49" name="__codelineno-23-49" href="#__codelineno-23-49"></a><span class="w"> </span><span class="p">.</span><span class="n">get_mut</span><span class="p">(</span><span class="o">&</span><span class="n">vet1</span><span class="p">)</span>
|
||||
<a id="__codelineno-23-50" name="__codelineno-23-50" href="#__codelineno-23-50"></a><span class="w"> </span><span class="p">.</span><span class="n">unwrap</span><span class="p">()</span>
|
||||
<a id="__codelineno-23-51" name="__codelineno-23-51" href="#__codelineno-23-51"></a><span class="w"> </span><span class="p">.</span><span class="n">retain</span><span class="p">(</span><span class="o">|&</span><span class="n">vet</span><span class="o">|</span><span class="w"> </span><span class="n">vet</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">vet2</span><span class="p">);</span>
|
||||
<a id="__codelineno-23-52" name="__codelineno-23-52" href="#__codelineno-23-52"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">adj_list</span>
|
||||
<a id="__codelineno-23-53" name="__codelineno-23-53" href="#__codelineno-23-53"></a><span class="w"> </span><span class="p">.</span><span class="n">get_mut</span><span class="p">(</span><span class="o">&</span><span class="n">vet2</span><span class="p">)</span>
|
||||
<a id="__codelineno-23-54" name="__codelineno-23-54" href="#__codelineno-23-54"></a><span class="w"> </span><span class="p">.</span><span class="n">unwrap</span><span class="p">()</span>
|
||||
<a id="__codelineno-23-55" name="__codelineno-23-55" href="#__codelineno-23-55"></a><span class="w"> </span><span class="p">.</span><span class="n">retain</span><span class="p">(</span><span class="o">|&</span><span class="n">vet</span><span class="o">|</span><span class="w"> </span><span class="n">vet</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">vet1</span><span class="p">);</span>
|
||||
<a id="__codelineno-23-56" name="__codelineno-23-56" href="#__codelineno-23-56"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-23-57" name="__codelineno-23-57" href="#__codelineno-23-57"></a>
|
||||
<a id="__codelineno-23-58" name="__codelineno-23-58" href="#__codelineno-23-58"></a><span class="w"> </span><span class="cm">/* 添加顶点 */</span>
|
||||
<a id="__codelineno-23-59" name="__codelineno-23-59" href="#__codelineno-23-59"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="nf">add_vertex</span><span class="p">(</span><span class="o">&</span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">vet</span><span class="p">:</span><span class="w"> </span><span class="nc">Vertex</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-23-60" name="__codelineno-23-60" href="#__codelineno-23-60"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">adj_list</span><span class="p">.</span><span class="n">contains_key</span><span class="p">(</span><span class="o">&</span><span class="n">vet</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-23-61" name="__codelineno-23-61" href="#__codelineno-23-61"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span>
|
||||
<a id="__codelineno-23-62" name="__codelineno-23-62" href="#__codelineno-23-62"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-23-63" name="__codelineno-23-63" href="#__codelineno-23-63"></a><span class="w"> </span><span class="c1">// 在邻接表中添加一个新链表</span>
|
||||
<a id="__codelineno-23-64" name="__codelineno-23-64" href="#__codelineno-23-64"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">adj_list</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="n">vet</span><span class="p">,</span><span class="w"> </span><span class="fm">vec!</span><span class="p">[]);</span>
|
||||
<a id="__codelineno-23-65" name="__codelineno-23-65" href="#__codelineno-23-65"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-23-66" name="__codelineno-23-66" href="#__codelineno-23-66"></a>
|
||||
<a id="__codelineno-23-67" name="__codelineno-23-67" href="#__codelineno-23-67"></a><span class="w"> </span><span class="cm">/* 删除顶点 */</span>
|
||||
<a id="__codelineno-23-68" name="__codelineno-23-68" href="#__codelineno-23-68"></a><span class="w"> </span><span class="cp">#[allow(unused)]</span>
|
||||
<a id="__codelineno-23-69" name="__codelineno-23-69" href="#__codelineno-23-69"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="nf">remove_vertex</span><span class="p">(</span><span class="o">&</span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">vet</span><span class="p">:</span><span class="w"> </span><span class="nc">Vertex</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-23-70" name="__codelineno-23-70" href="#__codelineno-23-70"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="o">!</span><span class="bp">self</span><span class="p">.</span><span class="n">adj_list</span><span class="p">.</span><span class="n">contains_key</span><span class="p">(</span><span class="o">&</span><span class="n">vet</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-23-71" name="__codelineno-23-71" href="#__codelineno-23-71"></a><span class="w"> </span><span class="fm">panic!</span><span class="p">(</span><span class="s">"value error"</span><span class="p">);</span>
|
||||
<a id="__codelineno-23-72" name="__codelineno-23-72" href="#__codelineno-23-72"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-23-73" name="__codelineno-23-73" href="#__codelineno-23-73"></a><span class="w"> </span><span class="c1">// 在邻接表中删除顶点 vet 对应的链表</span>
|
||||
<a id="__codelineno-23-74" name="__codelineno-23-74" href="#__codelineno-23-74"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">adj_list</span><span class="p">.</span><span class="n">remove</span><span class="p">(</span><span class="o">&</span><span class="n">vet</span><span class="p">);</span>
|
||||
<a id="__codelineno-23-75" name="__codelineno-23-75" href="#__codelineno-23-75"></a><span class="w"> </span><span class="c1">// 遍历其他顶点的链表,删除所有包含 vet 的边</span>
|
||||
<a id="__codelineno-23-76" name="__codelineno-23-76" href="#__codelineno-23-76"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">list</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">adj_list</span><span class="p">.</span><span class="n">values_mut</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-23-77" name="__codelineno-23-77" href="#__codelineno-23-77"></a><span class="w"> </span><span class="n">list</span><span class="p">.</span><span class="n">retain</span><span class="p">(</span><span class="o">|&</span><span class="n">v</span><span class="o">|</span><span class="w"> </span><span class="n">v</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">vet</span><span class="p">);</span>
|
||||
<a id="__codelineno-23-78" name="__codelineno-23-78" href="#__codelineno-23-78"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-23-79" name="__codelineno-23-79" href="#__codelineno-23-79"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-23-80" name="__codelineno-23-80" href="#__codelineno-23-80"></a>
|
||||
<a id="__codelineno-23-81" name="__codelineno-23-81" href="#__codelineno-23-81"></a><span class="w"> </span><span class="cm">/* 打印邻接表 */</span>
|
||||
<a id="__codelineno-23-82" name="__codelineno-23-82" href="#__codelineno-23-82"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="nf">print</span><span class="p">(</span><span class="o">&</span><span class="bp">self</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-23-83" name="__codelineno-23-83" href="#__codelineno-23-83"></a><span class="w"> </span><span class="fm">println!</span><span class="p">(</span><span class="s">"邻接表 ="</span><span class="p">);</span>
|
||||
<a id="__codelineno-23-84" name="__codelineno-23-84" href="#__codelineno-23-84"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">vertex</span><span class="p">,</span><span class="w"> </span><span class="n">list</span><span class="p">)</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="o">&</span><span class="bp">self</span><span class="p">.</span><span class="n">adj_list</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-23-85" name="__codelineno-23-85" href="#__codelineno-23-85"></a><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">list</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">list</span><span class="p">.</span><span class="n">iter</span><span class="p">().</span><span class="n">map</span><span class="p">(</span><span class="o">|</span><span class="n">vertex</span><span class="o">|</span><span class="w"> </span><span class="n">vertex</span><span class="p">.</span><span class="n">val</span><span class="p">).</span><span class="n">collect</span><span class="p">::</span><span class="o"><</span><span class="nb">Vec</span><span class="o"><</span><span class="kt">i32</span><span class="o">>></span><span class="p">();</span>
|
||||
<a id="__codelineno-23-86" name="__codelineno-23-86" href="#__codelineno-23-86"></a><span class="w"> </span><span class="fm">println!</span><span class="p">(</span><span class="s">"{}: {:?},"</span><span class="p">,</span><span class="w"> </span><span class="n">vertex</span><span class="p">.</span><span class="n">val</span><span class="p">,</span><span class="w"> </span><span class="n">list</span><span class="p">);</span>
|
||||
<a id="__codelineno-23-87" name="__codelineno-23-87" href="#__codelineno-23-87"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-23-88" name="__codelineno-23-88" href="#__codelineno-23-88"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-23-89" name="__codelineno-23-89" href="#__codelineno-23-89"></a><span class="p">}</span>
|
||||
<a id="__codelineno-23-31" name="__codelineno-23-31" href="#__codelineno-23-31"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">vet1</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">vet2</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-23-32" name="__codelineno-23-32" href="#__codelineno-23-32"></a><span class="w"> </span><span class="fm">panic!</span><span class="p">(</span><span class="s">"value error"</span><span class="p">);</span>
|
||||
<a id="__codelineno-23-33" name="__codelineno-23-33" href="#__codelineno-23-33"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-23-34" name="__codelineno-23-34" href="#__codelineno-23-34"></a><span class="w"> </span><span class="c1">// 添加边 vet1 - vet2</span>
|
||||
<a id="__codelineno-23-35" name="__codelineno-23-35" href="#__codelineno-23-35"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">adj_list</span><span class="p">.</span><span class="n">entry</span><span class="p">(</span><span class="n">vet1</span><span class="p">).</span><span class="n">or_default</span><span class="p">().</span><span class="n">push</span><span class="p">(</span><span class="n">vet2</span><span class="p">);</span>
|
||||
<a id="__codelineno-23-36" name="__codelineno-23-36" href="#__codelineno-23-36"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">adj_list</span><span class="p">.</span><span class="n">entry</span><span class="p">(</span><span class="n">vet2</span><span class="p">).</span><span class="n">or_default</span><span class="p">().</span><span class="n">push</span><span class="p">(</span><span class="n">vet1</span><span class="p">);</span>
|
||||
<a id="__codelineno-23-37" name="__codelineno-23-37" href="#__codelineno-23-37"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-23-38" name="__codelineno-23-38" href="#__codelineno-23-38"></a>
|
||||
<a id="__codelineno-23-39" name="__codelineno-23-39" href="#__codelineno-23-39"></a><span class="w"> </span><span class="cm">/* 删除边 */</span>
|
||||
<a id="__codelineno-23-40" name="__codelineno-23-40" href="#__codelineno-23-40"></a><span class="w"> </span><span class="cp">#[allow(unused)]</span>
|
||||
<a id="__codelineno-23-41" name="__codelineno-23-41" href="#__codelineno-23-41"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="nf">remove_edge</span><span class="p">(</span><span class="o">&</span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">vet1</span><span class="p">:</span><span class="w"> </span><span class="nc">Vertex</span><span class="p">,</span><span class="w"> </span><span class="n">vet2</span><span class="p">:</span><span class="w"> </span><span class="nc">Vertex</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-23-42" name="__codelineno-23-42" href="#__codelineno-23-42"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">vet1</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">vet2</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-23-43" name="__codelineno-23-43" href="#__codelineno-23-43"></a><span class="w"> </span><span class="fm">panic!</span><span class="p">(</span><span class="s">"value error"</span><span class="p">);</span>
|
||||
<a id="__codelineno-23-44" name="__codelineno-23-44" href="#__codelineno-23-44"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-23-45" name="__codelineno-23-45" href="#__codelineno-23-45"></a><span class="w"> </span><span class="c1">// 删除边 vet1 - vet2</span>
|
||||
<a id="__codelineno-23-46" name="__codelineno-23-46" href="#__codelineno-23-46"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">adj_list</span>
|
||||
<a id="__codelineno-23-47" name="__codelineno-23-47" href="#__codelineno-23-47"></a><span class="w"> </span><span class="p">.</span><span class="n">entry</span><span class="p">(</span><span class="n">vet1</span><span class="p">)</span>
|
||||
<a id="__codelineno-23-48" name="__codelineno-23-48" href="#__codelineno-23-48"></a><span class="w"> </span><span class="p">.</span><span class="n">and_modify</span><span class="p">(</span><span class="o">|</span><span class="n">v</span><span class="o">|</span><span class="w"> </span><span class="n">v</span><span class="p">.</span><span class="n">retain</span><span class="p">(</span><span class="o">|&</span><span class="n">e</span><span class="o">|</span><span class="w"> </span><span class="n">e</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">vet2</span><span class="p">));</span>
|
||||
<a id="__codelineno-23-49" name="__codelineno-23-49" href="#__codelineno-23-49"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">adj_list</span>
|
||||
<a id="__codelineno-23-50" name="__codelineno-23-50" href="#__codelineno-23-50"></a><span class="w"> </span><span class="p">.</span><span class="n">entry</span><span class="p">(</span><span class="n">vet2</span><span class="p">)</span>
|
||||
<a id="__codelineno-23-51" name="__codelineno-23-51" href="#__codelineno-23-51"></a><span class="w"> </span><span class="p">.</span><span class="n">and_modify</span><span class="p">(</span><span class="o">|</span><span class="n">v</span><span class="o">|</span><span class="w"> </span><span class="n">v</span><span class="p">.</span><span class="n">retain</span><span class="p">(</span><span class="o">|&</span><span class="n">e</span><span class="o">|</span><span class="w"> </span><span class="n">e</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">vet1</span><span class="p">));</span>
|
||||
<a id="__codelineno-23-52" name="__codelineno-23-52" href="#__codelineno-23-52"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-23-53" name="__codelineno-23-53" href="#__codelineno-23-53"></a>
|
||||
<a id="__codelineno-23-54" name="__codelineno-23-54" href="#__codelineno-23-54"></a><span class="w"> </span><span class="cm">/* 添加顶点 */</span>
|
||||
<a id="__codelineno-23-55" name="__codelineno-23-55" href="#__codelineno-23-55"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="nf">add_vertex</span><span class="p">(</span><span class="o">&</span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">vet</span><span class="p">:</span><span class="w"> </span><span class="nc">Vertex</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-23-56" name="__codelineno-23-56" href="#__codelineno-23-56"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">adj_list</span><span class="p">.</span><span class="n">contains_key</span><span class="p">(</span><span class="o">&</span><span class="n">vet</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-23-57" name="__codelineno-23-57" href="#__codelineno-23-57"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span>
|
||||
<a id="__codelineno-23-58" name="__codelineno-23-58" href="#__codelineno-23-58"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-23-59" name="__codelineno-23-59" href="#__codelineno-23-59"></a><span class="w"> </span><span class="c1">// 在邻接表中添加一个新链表</span>
|
||||
<a id="__codelineno-23-60" name="__codelineno-23-60" href="#__codelineno-23-60"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">adj_list</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="n">vet</span><span class="p">,</span><span class="w"> </span><span class="fm">vec!</span><span class="p">[]);</span>
|
||||
<a id="__codelineno-23-61" name="__codelineno-23-61" href="#__codelineno-23-61"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-23-62" name="__codelineno-23-62" href="#__codelineno-23-62"></a>
|
||||
<a id="__codelineno-23-63" name="__codelineno-23-63" href="#__codelineno-23-63"></a><span class="w"> </span><span class="cm">/* 删除顶点 */</span>
|
||||
<a id="__codelineno-23-64" name="__codelineno-23-64" href="#__codelineno-23-64"></a><span class="w"> </span><span class="cp">#[allow(unused)]</span>
|
||||
<a id="__codelineno-23-65" name="__codelineno-23-65" href="#__codelineno-23-65"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="nf">remove_vertex</span><span class="p">(</span><span class="o">&</span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">vet</span><span class="p">:</span><span class="w"> </span><span class="nc">Vertex</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-23-66" name="__codelineno-23-66" href="#__codelineno-23-66"></a><span class="w"> </span><span class="c1">// 在邻接表中删除顶点 vet 对应的链表</span>
|
||||
<a id="__codelineno-23-67" name="__codelineno-23-67" href="#__codelineno-23-67"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">adj_list</span><span class="p">.</span><span class="n">remove</span><span class="p">(</span><span class="o">&</span><span class="n">vet</span><span class="p">);</span>
|
||||
<a id="__codelineno-23-68" name="__codelineno-23-68" href="#__codelineno-23-68"></a><span class="w"> </span><span class="c1">// 遍历其他顶点的链表,删除所有包含 vet 的边</span>
|
||||
<a id="__codelineno-23-69" name="__codelineno-23-69" href="#__codelineno-23-69"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">list</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">adj_list</span><span class="p">.</span><span class="n">values_mut</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-23-70" name="__codelineno-23-70" href="#__codelineno-23-70"></a><span class="w"> </span><span class="n">list</span><span class="p">.</span><span class="n">retain</span><span class="p">(</span><span class="o">|&</span><span class="n">v</span><span class="o">|</span><span class="w"> </span><span class="n">v</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">vet</span><span class="p">);</span>
|
||||
<a id="__codelineno-23-71" name="__codelineno-23-71" href="#__codelineno-23-71"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-23-72" name="__codelineno-23-72" href="#__codelineno-23-72"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-23-73" name="__codelineno-23-73" href="#__codelineno-23-73"></a>
|
||||
<a id="__codelineno-23-74" name="__codelineno-23-74" href="#__codelineno-23-74"></a><span class="w"> </span><span class="cm">/* 打印邻接表 */</span>
|
||||
<a id="__codelineno-23-75" name="__codelineno-23-75" href="#__codelineno-23-75"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="nf">print</span><span class="p">(</span><span class="o">&</span><span class="bp">self</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-23-76" name="__codelineno-23-76" href="#__codelineno-23-76"></a><span class="w"> </span><span class="fm">println!</span><span class="p">(</span><span class="s">"邻接表 ="</span><span class="p">);</span>
|
||||
<a id="__codelineno-23-77" name="__codelineno-23-77" href="#__codelineno-23-77"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">vertex</span><span class="p">,</span><span class="w"> </span><span class="n">list</span><span class="p">)</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="o">&</span><span class="bp">self</span><span class="p">.</span><span class="n">adj_list</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-23-78" name="__codelineno-23-78" href="#__codelineno-23-78"></a><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">list</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">list</span><span class="p">.</span><span class="n">iter</span><span class="p">().</span><span class="n">map</span><span class="p">(</span><span class="o">|</span><span class="n">vertex</span><span class="o">|</span><span class="w"> </span><span class="n">vertex</span><span class="p">.</span><span class="n">val</span><span class="p">).</span><span class="n">collect</span><span class="p">::</span><span class="o"><</span><span class="nb">Vec</span><span class="o"><</span><span class="kt">i32</span><span class="o">>></span><span class="p">();</span>
|
||||
<a id="__codelineno-23-79" name="__codelineno-23-79" href="#__codelineno-23-79"></a><span class="w"> </span><span class="fm">println!</span><span class="p">(</span><span class="s">"{}: {:?},"</span><span class="p">,</span><span class="w"> </span><span class="n">vertex</span><span class="p">.</span><span class="n">val</span><span class="p">,</span><span class="w"> </span><span class="n">list</span><span class="p">);</span>
|
||||
<a id="__codelineno-23-80" name="__codelineno-23-80" href="#__codelineno-23-80"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-23-81" name="__codelineno-23-81" href="#__codelineno-23-81"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-23-82" name="__codelineno-23-82" href="#__codelineno-23-82"></a><span class="p">}</span>
|
||||
</code></pre></div>
|
||||
</div>
|
||||
<div class="tabbed-block">
|
||||
|
||||
Reference in New Issue
Block a user