findpathdfs-findpathdfs.html

来自「经典的数据结构源代码(java 实现)」· HTML 代码 · 共 47 行

HTML
47
字号
<html><head><title>Code Fragment</title></head><body text=#000000><center></center><br><br><dl><dd><pre><font color=#ff0080>/** Class specializing DFS to find a path between a start vertex and a target   * vertex. It assumes the target vertex is passed as the info object to the   * execute method. It returns an iterable list of the vertices and edges   * comprising the path from start to info. The returned path is empty if   * info is unreachable from start.  */</font><font color=#8000a0>public</font> <font color=#8000a0><font color=#ff8000>class</font> </font>FindPathDFS&lt;V, E&gt;    <font color=#8000a0><font color=#ff8000>extends</font> </font>DFS&lt;V, E, Vertex&lt;V&gt;, Iterable&lt;Position&gt;&gt; {  <font color=#8000a0><font color=#8000a0>protected</font> </font>PositionList&lt;Position&gt; path;  <font color=#8000a0><font color=#8000a0>protected</font> </font><font color=#8000a0>boolean</font> done;  <font color = #ff0080>/** Setup method to initialize the path. */</font>  <font color=#8000a0><font color=#8000a0>public</font> </font><font color=#8000a0>void</font> <font color=#0000ff>setup</font>() {    path = <font color=#8000a0><font color=#ff8000>new</font> </font>NodePositionList&lt;Position&gt;<font color=#0000ff></font>();    done = false;  }  <font color=#8000a0><font color=#8000a0>protected</font> </font><font color=#8000a0>void</font> <font color=#0000ff>startVisit</font>(Vertex&lt;V&gt; v) {    path.<font color=#0000ff>addLast</font>(v); <font color=#ff0080>// add vertex v to path</font>    <font color=#ff8000>if</font><font color=#0000ff> </font>(v == info)      done = true;  }  <font color=#8000a0><font color=#8000a0>protected</font> </font><font color=#8000a0>void</font> <font color=#0000ff>finishVisit</font>(Vertex&lt;V&gt; v) {    path.<font color=#0000ff>remove</font>(path.<font color=#0000ff>last</font>());	<font color=#ff0080>// remove v from path</font>    <font color=#ff8000>if</font><font color=#0000ff></font>(!path.<font color=#0000ff>isEmpty</font>())		<font color=#ff0080>// if v is not the start vertex</font>      path.<font color=#0000ff>remove</font>(path.<font color=#0000ff>last</font>());	<font color=#ff0080>// remove discovery edge into v from path</font>  }  <font color=#8000a0><font color=#8000a0>protected</font> </font><font color=#8000a0>void</font> <font color=#0000ff>traverseDiscovery</font>(Edge&lt;E&gt; e, Vertex&lt;V&gt; from) {    path.<font color=#0000ff>addLast</font>(e); <font color=#ff0080>// add edge e to the path</font>  }   <font color=#8000a0><font color=#8000a0>protected</font> </font><font color=#8000a0>boolean</font> <font color=#0000ff>isDone</font>() {     <font color=#8000a0><font color=#ff8000>return</font> </font>done;   }  <font color=#8000a0><font color=#8000a0>public</font> </font>Iterable&lt;Position&gt; <font color=#0000ff>finalResult</font>(Iterable&lt;Position&gt; r) {     <font color=#8000a0><font color=#ff8000>return</font> </font>path;  }}</dl></body></html>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?