📄 findcycledfs-findcycledfs.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<V, E> <font color=#8000a0><font color=#ff8000>extends</font> </font>DFS<V, E, Object, Iterable<Position>> { <font color=#8000a0><font color=#8000a0>protected</font> </font>PositionList<Position> 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<V> 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<Position><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<V> 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<V> 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<E> e, Vertex<V> 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<E> e, Vertex<V> 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<Position> <font color=#0000ff>finalResult</font>(Iterable<Position> 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<Position> 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 + -