⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 findcycledfs-findcycledfs.html

📁 经典的数据结构源代码(java 实现)
💻 HTML
字号:
<html><head><title>Code Fragment</title></head><body text=#000000><center></center><br><br><dl><dd><pre><font color = #ff0080>/** This class specializes DFS to find a cycle. */</font><font color=#8000a0>public</font> <font color=#8000a0><font color=#ff8000>class</font> </font>FindCycleDFS&lt;V, E&gt;   <font color=#8000a0><font color=#ff8000>extends</font> </font>DFS&lt;V, E, Object, Iterable&lt;Position&gt;&gt; {  <font color=#8000a0><font color=#8000a0>protected</font> </font>PositionList&lt;Position&gt; cycle; <font color=#ff0080>// sequence of edges of the cycle</font>  <font color=#8000a0><font color=#8000a0>protected</font> </font><font color=#8000a0>boolean</font> done;  <font color=#8000a0><font color=#8000a0>protected</font> </font>Vertex&lt;V&gt; cycleStart;  <font color=#8000a0><font color=#8000a0>public</font> </font><font color=#8000a0>void</font> <font color=#0000ff>setup</font>() {     cycle = <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) { cycle.<font color=#0000ff>addLast</font>(v); }  <font color=#8000a0><font color=#8000a0>protected</font> </font><font color=#8000a0>void</font> <font color=#0000ff>finishVisit</font>(Vertex&lt;V&gt; v) {    cycle.<font color=#0000ff>remove</font>(cycle.<font color=#0000ff>last</font>());	<font color=#ff0080>// remove v from cycle</font>    <font color=#ff8000>if</font><font color=#0000ff> </font>(!cycle.<font color=#0000ff>isEmpty</font>()) cycle.<font color=#0000ff>remove</font>(cycle.<font color=#0000ff>last</font>()); <font color=#ff0080>// remove edge into v from cycle</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) {     cycle.<font color=#0000ff>addLast</font>(e);   }  <font color=#8000a0><font color=#8000a0>protected</font> </font><font color=#8000a0>void</font> <font color=#0000ff>traverseBack</font>(Edge&lt;E&gt; e, Vertex&lt;V&gt; from) {    cycle.<font color=#0000ff>addLast</font>(e);		<font color=#ff0080>// back edge e creates a cycle</font>    cycleStart = graph.<font color=#0000ff>opposite</font>(from, e);    cycle.<font color=#0000ff>addLast</font>(cycleStart);	<font color=#ff0080>// first vertex completes the cycle</font>    done = true;  }  <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=#ff0080>// remove the vertices and edges from start to cycleStart</font>    <font color=#ff8000>if</font><font color=#0000ff> </font>(!cycle.<font color=#0000ff>isEmpty</font>()) {      <font color=#ff8000>for</font><font color=#0000ff> </font>(Position&lt;Position&gt; p: cycle.<font color=#0000ff>positions</font>()) {	<font color=#ff8000>if</font><font color=#0000ff> </font>(p.<font color=#0000ff>element</font>() == cycleStart)	  <font color=#ff8000>break</font>;	cycle.<font color=#0000ff>remove</font>(p);                     <font color=#ff0080>// remove vertex from cycle</font>      }    }    <font color=#8000a0><font color=#ff8000>return</font> </font>cycle; <font color=#ff0080>// list of the vertices and edges of the cycle </font>  }}</dl></body></html>

⌨️ 快捷键说明

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