Merge branch 'master' of git.odin.cse.buffalo.edu:ODIn/Website

pull/2/head
Oliver Kennedy 2022-10-05 15:34:49 -04:00
commit 2e06b822ce
Signed by: okennedy
GPG Key ID: 3E5F9B3ABD3FDB60
33 changed files with 6187 additions and 12 deletions

View File

@ -298,44 +298,54 @@ schedule:
section_b:
slides: slide/12b-RecursionAndAverage.html
- date: 09/30/22
topic: Data-Bounded Analysis
topic: Stacks, Queues
dow: Fri
section_a:
slides: slide/lec14a.pdf
section_b:
slides: slide/13b-AverageQueueStack.html
- week: 6
lectures:
- date: 10/03/22
topic: "Composite Data Structures, Stacks, Shortest Path"
topic: "Applications of Stacks, Queues (Mazes)"
dow: Mon
section_a:
slides: slide/lec15a.pdf
section_b:
slides: slide/14b-QueueStackApps.html
- date: 10/05/22
topic: "Queues, Shortest Path revisited"
topic: "Graphs; Graph ADTs"
dow: Wed
section_b:
slides: slide/15b-Graphs.html
- date: 10/07/22
due: PA2-Tests
topic: Graphs Intro
topic: "Graph Search; DFS"
dow: Fri
section_b:
slides: slide/16b-GraphExploration.html
- week: 7
lectures:
- date: 10/10/22
topic: "Graph ADTs: Edge Lists"
topic: "Graph Search; Pathfinding, BFS"
due: PA2-Tests
dow: Mon
- date: 10/12/22
topic: DFS, BFS, Analysis
topic: BFS, Shortest Path, Priority Queues
dow: Wed
- date: 10/14/22
due: PA2
topic: Priority Queues, Orderings
topic: Order Relations, Priority Queues
dow: Fri
- week: 8
lectures:
- date: 10/17/22
topic: Midterm Review
due: PA2
dow: Mon
- date: 10/19/22
special: Midterm Exam
dow: Wed
- date: 10/21/22
topic: Priority Queues, Orderings
topic: Organizing Cat Pictures
dow: Fri
- week: 9
lectures:

View File

@ -2,7 +2,7 @@
template: templates/cse250_2022_slides.erb
title: Average Runtime, Stacks, Queues
date: Sept 30, 2022
textbook: Ch. 15
textbook: Ch. 15, Ch. 7
---
<section>

View File

@ -0,0 +1,617 @@
---
template: templates/cse250_2022_slides.erb
title: Average Runtime, Stacks, Queues
date: Oct 3, 2022
textbook: Ch. 7
cat: graphics/14b/cat.png
---
<section>
<h4 class="slide_title">Stacks</h4>
<p>A stack of objects on top of one another.</p>
<dl>
<dt>Push</dt>
<dd>Put a new object on top of the stack</dd>
<dt>Pop</dt>
<dd>Remove the object on top of the stack</dd>
<dt>Top</dt>
<dd>Peek at what's on top of the stack</dd>
</dl>
</section>
<section>
<h4 class="slide_title">Queue</h4>
<p>Outside of the US, "queueing" is lining up.</p>
<dl>
<dt>Enqueue</dt>
<dd>Put a new object at the end of the queue</dd>
<dt>Dequeue</dt>
<dd>Remove the next object in the queue</dd>
<dt>Head</dt>
<dd>Peek at the next object in the queue</dd>
</dl>
</section>
<section>
<p style="font-size: 90%"><b>Thought question:</b> How could you use an array to build a queue?</p>
</section>
<section>
<h4 class="slide_title">ArrayBuffer Attempt 1</h4>
<dl>
<dt>Enqueue</dt>
<dd>Append</dd>
<dt>Dequeue</dt>
<dd>Remove(0)</dd>
</dl>
<p class="fragment">What's the complexity?</p>
</section>
<section>
<h4 class="slide_title">ArrayBuffer Attempt 2</h4>
<dl>
<dt>Enqueue</dt>
<dd>Insert(0)</dd>
<dt>Dequeue</dt>
<dd>Remove(last)</dd>
</dl>
<p class="fragment">What's the complexity?</p>
</section>
<section>
<p>Can we avoid having to move all of the<br> elements forward or backward a spot?</p>
</section>
<section>
<style type="text/css">
#dequeue_example {
height: 500px;
width: 500px;
border: solid 1px black;
margin-left: auto;
margin-right: auto;
overflow-y: scroll;
}
#dequeue_example .dequeue_node {
width: 50px;
height: 50px;
display: inline-block;
color: lightgray;
background: black;
margin-left: auto;
margin-right: auto;
margin-top: 5px;
}
#dequeue_example .dequeue_node.dequeue_end {
border-bottom: solid 10px green;
}
#dequeue_example .dequeue_node.dequeue_start {
border-bottom: solid 10px blue;
}
#dequeue_example .dequeue_node.dequeue_end.dequeue_start {
border-bottom: solid 10px green;
}
</style>
<button onclick="dequeue_enqueue()">Enqueue</button>
<button onclick="dequeue_dequeue()">Dequeue</button>
<div id="dequeue_example">
<div class="dequeue_node dequeue_start dequeue_end ">_</div>
<div class="dequeue_node">_</div>
<div class="dequeue_node">_</div>
<div class="dequeue_node">_</div>
</div>
<script type="text/javascript">
var dequeue = document.getElementById("dequeue_example")
var dequeue_counter = 0
function dequeue_expand() {
var values = []
var x
while(x = dequeue_dequeue()){
values.push(x)
}
console.log("Copying values: "+values)
var count = dequeue.children.length * 2
dequeue.innerText = ""
for(x = 0; x < count; x++){
var elem = document.createElement('div')
elem.classList.add("dequeue_node")
console.log("Update "+x)
if(x == 0){
console.log("Start")
elem.classList.add("dequeue_start")
}
if(x == values.length){
console.log("End")
elem.classList.add("dequeue_end")
}
if(x < values.length){
console.log("Existing: "+values[x])
elem.innerText = values[x]
} else {
console.log("Blank")
elem.innerText = "_"
}
dequeue.append(elem)
}
}
function dequeue_enqueue() {
var node = dequeue.querySelector(".dequeue_end")
var next = node.nextElementSibling || dequeue.firstElementChild
if(next.classList.contains("dequeue_start")){
dequeue_expand()
node = dequeue.querySelector(".dequeue_end")
next = node.nextElementSibling || dequeue.firstElementChild
}
node.innerText = dequeue_counter++
node.classList.add("active")
node.classList.remove("dequeue_end")
next.classList.add("dequeue_end")
}
function dequeue_dequeue() {
var node = dequeue.querySelector(".dequeue_start")
var next = node.nextElementSibling || dequeue.firstElementChild
if(node.classList.contains("dequeue_end")){ return null }
var ret = node.innerText
node.innerText = "_"
node.classList.remove("active")
node.classList.remove("dequeue_start")
next.classList.add("dequeue_start")
return ret
}
</script>
</section>
<section>
<h4 class="slide_title">ArrayDequeue (Resizable Ring Buffer)</h4>
<p>Active Array = [start, end)</p>
<dl style="font-size: 80%">
<dt>Enqueue</dt>
<dd>Resize buffer if needed</dd>
<dd>Add new element at buffer[end]</dd>
<dd>Advance end pointer (wrap around to front)</dd>
<dt>Dequeue</dt>
<dd>Remove element at buffer[start]</dd>
<dd>Advance start pointer (wrap around to front)</dd>
</dl>
<p class="fragment">What's the complexity?</p>
</section>
<section>
<h4 class="slide_title">Applications of Stacks and Queues</h4>
<ul>
<li class="fragment highlight-blue">Stack: Checking for Balanced Parenthesis/Braces</li>
<li>Queue: Scheduling Packets for Delivery</li>
<li>Both: Searching Mazes</li>
</ul>
</section>
<section>
<h4 class="slide_title">Balanced Parenthesis/Braces</h4>
<p>What does it mean for parenthesis/braces to be balanced?</p>
<ul>
<li>Every opening symbol is matched by a closing symbol</li>
<li>No nesting overlaps (e.g., <tt style="font-weight: bold;">{(})</tt> is not ok).</li>
</ul>
<table style="margin-top: 50px;">
<tr>
<td><tt style="font-weight: bold;">{()({})}</tt></td>
<td><tt style="font-weight: bold;">{())</tt></td>
<td><tt style="font-weight: bold;">())</tt></td>
</tr>
<tr>
<td style="font-size: 200%" class="fragment">✅</td>
<td style="font-size: 200%" class="fragment">❌</td>
<td style="font-size: 200%" class="fragment">❌</td>
</tr>
</table>
</section>
<section>
<h4 class="slide_title">Balanced Parenthesis/Braces</h4>
<p><b>Idea: </b> Count the number of unmatched open parens, braces.</p>
<p>Increment counter on <tt>(</tt>, decrement on <tt>)</tt></p>
<p class="fragment"><b>Problem: </b> allows <tt style="font-weight: bold;">{(})</tt></p>
</section>
<section>
<h4 class="slide_title">Balanced Parenthesis/Braces</h4>
<p><b>Idea: </b> Track nesting on a stack!</p>
<p>On <tt>(</tt> or <tt>{</tt>, push the symbol on the stack.</p>
<p>On <tt>)</tt> or <tt>}</tt>, pop the stack and check the popped symbol.</p>
</section>
<section>
<style type="text/css">
#nesting_stack {
height: 400px;
width: 200px;
border: solid 1px black;
margin-left: auto;
margin-right: auto;
overflow-y: scroll;
transition-property: background;
transition-duration: 0.1s;
}
#nesting_stack.nesting_alert {
background: #ffbbbb;
}
#nesting_stack .nesting_symbol {
width: 50px;
height: 50px;
display: block;
color: lightgray;
background: black;
margin-left: auto;
margin-right: auto;
margin-top: 5px;
}
#nesting_string {
height: 100px;
font-family: fixed;
}
#nesting_string::before {
content: '"';
}
#nesting_string::after {
content: '"';
}
</style>
<button onclick="nesting_push('(')">(</button>
<button onclick="nesting_push('{')">{</button>
<button onclick="nesting_pop(')')">)</button>
<button onclick="nesting_pop('}')">}</button>
<div id="nesting_stack"></div>
<div id="nesting_string"></div>
<script type="text/javascript">
var nesting_stack = document.getElementById("nesting_stack")
var nesting_string = document.getElementById("nesting_string")
function nesting_push(chr){
nesting_string.innerText = nesting_string.innerText+chr
var elem = document.createElement('div')
elem.classList.add("nesting_symbol")
elem.innerText = chr
nesting_stack.prepend(elem)
}
function nesting_alert(){
nesting_stack.classList.add("nesting_alert")
setTimeout(() => {
nesting_stack.classList.remove("nesting_alert")
}, 100)
}
function nesting_pop(chr){
var elem = nesting_stack.firstElementChild
var match = (chr == ")" ? "(" : "{")
if(!elem){ nesting_alert() }
else {
if(elem.innerText != match){ nesting_alert() }
else {
nesting_string.innerText = nesting_string.innerText+chr
elem.remove()
}
}
}
</script>
</section>
<section>
<h4 class="slide_title">Network Packets</h4>
<dl style="font-size: 75%">
<dt>Router: 1gb/s internal network, 100mb/s external</dt>
<dd><ul>
<li>1gb/s sent to router, but only 100mb/s can leave.</li>
<li>How do packets get delivered?</li>
</ul></dd>
<dt>Queues</dt>
<dd><ul>
<li>Enqueue data packets in the order they are received.</li>
<li>When outgoing bandwidth available, dequeue and send.</li>
</ul></dd>
<dt>Avoiding Queueing Delays</dt>
<dd><ul>
<li>Limit size of queue; Packets that don't fit are dropped</li>
</ul></dd>
<p style="font-size: 70%">
<span style="margin-right: auto">
<b>TCP:</b> blocked packets are retried
</span>
<span style="margin-left: 50px;">
<b>UDP:</b> application deals with dropped packets.
</span>
</p>
</dl>
</section>
<section>
<h4 class="slide_title">Mazes</h4>
<ul style="font-size: 80%; max-width: 450px;">
<li><b>O</b> is the start, <b>X</b> is the objective <ul>
<li>There may be multiple paths</li>
<li>Generally, we want the shortest</li>
</ul></li>
<li class="fragment"><b>Approach 1: </b> Take the first available route in one direction <ul>
<li style="color: red">Right, Down, Left, or Up</li>
<li style="color: blue">Down, Right, Up, Left</li>
</ul></li>
</ul>
<img src="graphics/14b/maze1.png" style="float: right" width="300px">
</section>
<section>
<h4 class="slide_title">Mazes</h4>
<ul style="font-size: 80%; max-width: 450px;">
<li><b>O</b> is the start, <b>X</b> is the objective <ul>
<li>There may be multiple paths</li>
<li>Generally, we want the shortest</li>
</ul></li>
<li><b>Approach 1: </b> Take the first available route in one direction <ul>
<li style="color: red">Right, Down, Left, or Up</li>
<li style="color: blue">Down, Right, Up, Left</li>
</ul></li>
</ul>
<img src="graphics/14b/maze1-rdlu.png" style="float: right" width="300px">
</section>
<section>
<h4 class="slide_title">Mazes</h4>
<img src="graphics/14b/maze1-rdlu.png">
<p>How do you know which one is best?</p>
<p class="fragment">Other problems with this algorithm?</p>
</section>
<section>
<h4 class="slide_title">Mazes</h4>
<img src="graphics/14b/maze2.png" width="350px">
<p>&nbsp;</p>
</section>
<section>
<h4 class="slide_title">Mazes</h4>
<img src="graphics/14b/maze2-rdlu.png" width="350px">
<p class="fragment">Priority order doesn't guarantee exploring the entire maze</p>
</section>
<section>
<h4 class="slide_title">Formalizing Maze-Solving</h4>
<div style="font-size: 80%;">
<p><b>Inputs:</b> <ul>
<li>The map: An $n\times m$ grid of filled/empty squares.</li>
<li>The <b>O</b> is at position $start$</li>
<li>The <b>X</b> is at position $dest$</li>
</ul></p>
<p><b>Goal: </b>
<li>Compute $steps(\texttt{start}, \texttt{dest})$, the minimum steps from start to end.</li>
</p>
</div>
<p class="fragment">How do we define $steps$?</p>
</section>
<section>
<h4 class="slide_title">Formalizing Maze-Solving</h4>
<svg data-src="graphics/14b/maze1-distances.svg" />
</section>
<section>
<h4 class="slide_title">Formalizing Maze-Solving</h4>
<div style="font-size: 70%">
$$steps(\texttt{pos},\texttt{dest}) = \begin{cases}
0 & \textbf{if } \texttt{pos} = \texttt{dest}\\
\end{cases}$$
</div>
</section>
<section>
<h4 class="slide_title">Formalizing Maze-Solving</h4>
<div style="font-size: 70%">
$$steps(\texttt{pos},\texttt{dest}) = \begin{cases}
0 & \textbf{if } \texttt{pos} = \texttt{dest}\\
\infty & \textbf{if } is\_filled(\texttt{pos})\\
\end{cases}$$
</div>
</section>
<section>
<h4 class="slide_title">Formalizing Maze-Solving</h4>
<div style="font-size: 70%">
$$steps(\texttt{pos},\texttt{dest}) = \begin{cases}
0 & \textbf{if } \texttt{pos} = \texttt{dest}\\
\infty & \textbf{if } is\_filled(\texttt{pos})\\
1 + min\_adjacent(\texttt{pos}, \texttt{dest}) & \textbf{otherwise}
\end{cases}$$
</div>
<p class="fragment" data-fragment-index="1">where...</p>
<p style="text-align: left;" class="fragment" data-fragment-index="1">
$min\_adjacent(\texttt{pos}, \texttt{dest}) = $
$$\min\begin{cases}
steps(moveRight(\texttt{pos}), \texttt{dest})\\
steps(moveDown(\texttt{pos}), \texttt{dest})\\
steps(moveLeft(\texttt{pos}), \texttt{dest})\\
steps(moveUp(\texttt{pos}), \texttt{dest})\\
\end{cases}$$
</p>
</section>
<section>
<h4 class="slide_title">$steps(\texttt{pos}, \texttt{dest})$</h4>
<ul style="font-size: 80%">
<li><b>if</b> <tt>pos == dest</tt> <b>then</b> <tt>return 0</tt></li>
<li><b>elif</b> <tt>is_filled(pos)</tt> <b>then</b> <tt>return ∞</tt></li>
<li><b>else</b> <tt>return 1 +</tt> min of<ul style="font-size: 80%">
<li>$steps(moveRight(\texttt{pos}, \texttt{dest}))$</li>
<li>$steps(moveDown(\texttt{pos}, \texttt{dest}))$</li>
<li>$steps(moveLeft(\texttt{pos}, \texttt{dest}))$</li>
<li>$steps(moveUp(\texttt{pos}, \texttt{dest}))$</li>
</ul></li>
</ul>
</section>
<section>
<img src="graphics/14b/maze2.png">
</section>
<section>
<p><b>Problem: </b> Infinite loop!</p>
</section>
<section>
<p><b>Insight: </b> A path with a loop in it can't<br>be shorter than one without the loop.</p>
<p class="fragment">Mark nodes as visited</p>
</section>
<section>
<h4 class="slide_title">$steps(\texttt{pos}, \texttt{dest})$</h4>
<ul style="font-size: 70%">
<li><b>if</b> <tt>pos == dest</tt> <b>then</b> <tt>return 0</tt></li>
<li style="color: forestgreen;"><b>elif</b> <tt>pos</tt> marked visited <b>then</b> <tt>return ∞</tt></li>
<li><b>elif</b> <tt>is_filled(pos)</tt> <b>then</b> <tt>return ∞</tt></li>
<li><b>else</b> <ul>
<li style="color: forestgreen;">Mark <tt>pos</tt> as visited</li>
<li><tt>return 1 +</tt> min of all 4 steps</li>
</ul></li>
</ul>
</section>
<section>
<img src="graphics/14b/maze2.png">
</section>
<section>
<p><b>Problem: </b> The first time you visit a node,<br>it may be via a longer path!</p>
<p class="fragment">Unmark nodes as you leave them</p>
</section>
<section>
<h4 class="slide_title">$steps(\texttt{pos}, \texttt{dest})$</h4>
<ul style="font-size: 60%">
<li><b>if</b> <tt>pos == dest</tt> <b>then</b> <tt>return 0</tt></li>
<li><b>elif</b> <tt>pos</tt> marked visited <b>then</b> <tt>return ∞</tt></li>
<li><b>elif</b> <tt>is_filled(pos)</tt> <b>then</b> <tt>return ∞</tt></li>
<li><b>else</b> <ul>
<li>Mark <tt>pos</tt> as visited</li>
<li><tt>stepCount = 1 +</tt> min of all 4 steps</li>
<li style="color: forestgreen;">Unmark <tt>pos</tt> as visited</li>
<li style="color: forestgreen;"><tt>return stepCount</tt></li>
</ul></li>
</ul>
</section>
<section>
<h4 class="slide_title">Maze-Solving</h4>
<div style="font-size: 80%;">
<p><b>Inputs:</b> <ul>
<li>The map: An $n\times m$ grid of filled/empty squares.</li>
<li>The <b>O</b> is at position $start$</li>
<li>The <b>X</b> is at position $dest$</li>
</ul></p>
<p><b>Goal: </b>
<li>Compute $steps(\texttt{start}, \texttt{dest})$, the minimum steps from start to end.</li>
</p>
</div>
<p class="fragment">What path did we take?</p>
</section>
<section>
<p><p>Idea: </p> Follow the nodes marked visited</p>
</section>
<section>
<h4 class="slide_title">$steps(\texttt{pos}, \texttt{dest}, \texttt{visited})$</h4>
<ul style="font-size: 70%">
<li><b>if</b> <tt>pos == dest</tt> <b>then</b> <tt>return <span style="color: forestgreen;">visited.copy()</span></tt></li>
<li><b>elif</b> <tt>pos</tt> <span style="color: forestgreen;">∈ <tt>visited</tt></span> <tt>return <span style="color: forestgreen;">no_path</span></tt></tt></li>
<li><b>elif</b> <tt>is_filled(pos)</tt> <b>then</b> <tt>return <span style="color: forestgreen;">no_path</span></tt></tt></li>
<li><b>else</b> <ul>
<li><tt style="color: forestgreen;">visited.append(pos)</tt></li>
<li style="color: forestgreen;"><tt>bestPath = </tt> min of all 4 one-step paths</li>
<li><tt style="color: forestgreen;">visited.removeLast()</tt></li>
<li><tt>return bestPath</tt></li>
</ul></li>
</ul>
</section>
<section>
<h4 class="slide_title">$steps(\texttt{pos}, \texttt{dest}, \texttt{visited})$</h4>
<ul style="font-size: 70%">
<li><b>if</b> <tt>pos == dest</tt> <b>then</b> <tt>return visited.copy()</tt></li>
<li><b>elif</b> <tt>pos</tt> ∈ <tt>visited</tt> <tt>return no_path</tt></tt></li>
<li><b>elif</b> <tt>is_filled(pos)</tt> <b>then</b> <tt>return no_path</tt></tt></li>
<li><b>else</b> <ul>
<li><tt style="color: forestgreen;">visited.push(pos)</tt></li>
<li><tt>bestPath = </tt> min of all 4 one-step paths</li>
<li><tt style="color: forestgreen;">visited.pop()</tt></li>
<li><tt>return bestPath</tt></li>
</ul></li>
</ul>
</section>
<section>
<p><b>Thought question:</b> Can you solve a maze<br>with a <b>queue</b> instead?</p>
</section>

View File

@ -0,0 +1,704 @@
---
template: templates/cse250_2022_slides.erb
title: Graphs
date: Oct 5, 2022
textbook: Ch. 15.3
cat: graphics/15b/cat.png
attribution: Based on slides by Tamassa Goodrich
---
<section>
<h4 class="slide_title">Graphs</h4>
<p>A <b>graph</b> is a pair $(V, E)$ where</p>
<ul>
<li>$V$ is a set of <b>vertices</b></li>
<li>$E$ is a set of vertex pairs called <b>edges</b></li>
<li>edges and vertices may also store data (<b>labels</b>)</li>
</ul>
</section>
<section>
<h4 class="slide_title">Graphs</h4>
<p><b>Example:</b> A computer network<br>(edges store ping, nodes store addresses)</p>
<img src="graphics/15b/network.png" width="600px">
</section>
<section>
<h4 class="slide_title">Edge Types</h4>
<img src="graphics/15b/edge_example.png" style="float: right; margin-top: 70px" width="200px">
<dl width="500px" style="font-size: 80%">
<dt>Directed Edge (e.g., transmit bandwidth)</dt>
<dd><ul>
<li>Ordered pair of vertices $(u, v)$</li>
<li>origin ($u$) → destination ($v$)</li>
</ul></dd>
<dt>Undirected edge (e.g., round-trip latency)</dt>
<dd><ul>
<li>Unordered pair of vertices $(u, v)$</li>
</ul></dd>
<div class="fragment">
<dt>Directed Graph</dt>
<dd>All edges are directed</dd>
<dt>Undirected Graph</dt>
<dd>All edges are undirected</dd>
</div>
</dl>
</section>
<section>
<h4 class="slide_title">Other Applications</h4>
<ul>
<li>Transporation (Flight/Road/Rail Routing)</li>
<li>Protein/Protein Interactions</li>
<li>Social Networks</li>
<li>Dependency Tracking (e.g., <b>make</b>)</li>
<li>Taxonomies</li>
</ul>
</section>
<section>
<h4 class="slide_title">Terminology</h4>
<img src="graphics/15b/graph_example.png" width="400px">
<dl style="font-size: 50%">
<dt>Endpoints (end-vertices) of an edge</dt>
<dd>U, V are the endpoints of a</dd>
<dt>Edges incident on a vertex</dt>
<dd>a, b, d are incident on V</dd>
<dt>Adjacent Vertices</dt>
<dd>U, V are adjacent</dd>
<dt>Degree of a vertex (# of incident edges)</dt>
<dd>X has degree 5</dd>
<dt>Parallel Edges</dt>
<dd>h, i are parallel</dd>
<dt>Self-Loop</dt>
<dd>j is a self-loop</dd>
<dt>Simple Graph</dt>
<dd>A graph without parallel edges or self-loops</dd>
</dl>
</section>
<section>
<h4 class="slide_title">Terminology</h4>
<img src="graphics/15b/graph_example.png" width="400px">
<dl style="font-size: 60%; width: 400px;">
<dt>Path</dt>
<dd>Sequence of alternating vertices and edges</dd>
<dd>begins with a vertex</dd>
<dd>ends with a vertex</dd>
<dd>each edge is preceded and followed by its endpoints</dd>
<div class="fragment">
<dt>Simple Path</dt>
<dd>path such that all of its vertices and edges are distinct</dd>
</div>
<dt class="fragment">Examples</dt>
<dd>&nbsp;</dd>
<dd>&nbsp;<br>&nbsp;</dd>
</dl>
</section>
<section>
<h4 class="slide_title">Terminology</h4>
<img src="graphics/15b/graph_example_red.png" width="400px">
<dl style="font-size: 60%; width: 400px;">
<dt>Path</dt>
<dd>Sequence of alternating vertices and edges</dd>
<dd>begins with a vertex</dd>
<dd>ends with a vertex</dd>
<dd>each edge is preceded and followed by its endpoints</dd>
<dt>Simple Path</dt>
<dd>path such that all of its vertices and edges are distinct</dd>
<dt>Examples</dt>
<dd><span style="color: red">V, b, X, h, Z</span> is a simple path.</dd>
<dd>&nbsp;<br>&nbsp;</dd>
</dl>
</section>
<section>
<h4 class="slide_title">Terminology</h4>
<img src="graphics/15b/graph_example_red_blue.png" width="400px">
<dl style="font-size: 60%; width: 400px;">
<dt>Path</dt>
<dd>Sequence of alternating vertices and edges</dd>
<dd>Begins with a vertex</dd>
<dd>Ends with a vertex</dd>
<dd>Each edge is preceded and followed by its endpoints</dd>
<dt>Simple Path</dt>
<dd>Path such that all of its vertices and edges are distinct</dd>
<dt>Examples</dt>
<dd><span style="color: red">V, b, X, h, Z</span> is a simple path.</dd>
<dd><span style="color: blue">U, c, W, e, X, g, Y, f, W, d, V</span> is a path that is not simple.</dd>
</dl>
</section>
<section>
<h4 class="slide_title">Terminology</h4>
<img src="graphics/15b/graph_example.png" width="400px">
<dl style="font-size: 60%; width: 500px;">
<dt>Cycle</dt>
<dd>Path that begins and ends with the same vertex</dd>
<dd>Must contain at least one edge</dd>
<dt>Simple Cycle</dt>
<dd>Cycle such that all of its vertices and edges are distinct</dd>
<dt class="fragment">Examples</dt>
<dd>&nbsp;</dd>
<dd>&nbsp;<br>&nbsp;</dd>
</dl>
</section>
<section>
<h4 class="slide_title">Terminology</h4>
<img src="graphics/15b/graph_example_cycle_red.png" width="400px">
<dl style="font-size: 60%; width: 500px;">
<dt>Cycle</dt>
<dd>Path that begins and ends with the same vertex</dd>
<dd>Must contain at least one edge</dd>
<dt>Simple Cycle</dt>
<dd>Cycle such that all of its vertices and edges are distinct</dd>
<dt>Examples</dt>
<dd><span style="color: red;">V, b, X, g, Y, f, W, c, U, a, V</span> is a simple cycle</dd>
<dd>&nbsp;<br>&nbsp;</dd>
</dl>
</section>
<section>
<h4 class="slide_title">Terminology</h4>
<img src="graphics/15b/graph_example_cycle_red_blue.png" width="400px">
<dl style="font-size: 60%; width: 500px;">
<dt>Cycle</dt>
<dd>Path that begins and ends with the same vertex</dd>
<dd>Must contain at least one edge</dd>
<dt>Simple Cycle</dt>
<dd>Cycle such that all of its vertices and edges are distinct</dd>
<dt>Examples</dt>
<dd><span style="color: red;">V, b, X, g, Y, f, W, c, U, a, V</span> is a simple cycle</dd>
<dd><span style="color: blue;">U, c, W, e, X, g, Y, f, W, d, V</span> is a cycle that is not simple</dd>
</dl>
</section>
<section>
<h4 class="slide_title">Notation</h4>
<dl>
<dt>$n$</dt>
<dd>The number of vertices</dd>
<dt>$m$</dt>
<dd>The number of edges</dd>
<dt>$deg(v)$</dt>
<dd>The degree of vertex $v$</dd>
</dl>
</section>
<section>
<h4 class="slide_title">Graph Properties</h4>
$$\sum_{v} deg(v) = 2m$$
<p class="fragment"><b>Proof: </b> Each edge is counted twice</p>
</section>
<section>
<h4 class="slide_title">Graph Properties</h4>
<p>In a directed graph with no self-loops and no parallel edges:</p>
$$m \leq n(n-1)$$
<p class="fragment">
<ul>
<li>No parallel edges: each pair connected at most once</li>
<li>No self loops: pick each vertex once</li>
</ul>
</p>
<p class="fragment">
$n$ choices for the first vertex; $(n-1)$ choices for the second vertex.
$$m \leq n(n-1)$$
</p>
</section>
<section>
<p>Hey, isn't this a <b>data structures</b> class?</p>
</section>
<section>
<h4 class="slide_title">A (Directed) Graph ADT</h4>
<dl>
<dt>Two type parameters (<tt>Graph[V, E]</tt>)</dt>
<dd><tt>V</tt>: The vertex label type</dd>
<dd><tt>E</tt>: The edge label type</dd>
<dt>Vertices</dt>
<dd>... are elements (like Linked List Nodes)</dd>
<dd>... store a value of type <tt>V</tt></dd>
<dt>Edges</dt>
<dd>... are elements</dd>
<dd>... store a value of type <tt>E</tt></dd>
</dl>
</section>
<section>
<h4 class="slide_title">A (Directed) Graph ADT</h4>
<pre><code class="scala">
trait Graph[V, E] {
def vertices: Iterator[Vertex]
def edges: Iterator[Edge]
def addVertex(label: V): Vertex
def addEdge(orig: Vertex, dest: Vertex, label: E): Edge
def removeVertex(vertex: Vertex): Unit
def removeEdge(edge: Edge): Unit
}
</code></pre>
</section>
<section>
<h4 class="slide_title">A (Directed) Graph ADT</h4>
<pre><code class="scala">
trait Vertex[V, E] {
def outEdges: Seq[Edge]
def inEdges: Seq[Edge]
def incidentEdges: Iterator[Edge] = outEdges ++ inEdges
def edgeTo(v: Vertex): Boolean
def label: V
}
trait Edge[V, E] {
def origin: Vertex
def destination: Vertex
def label: E
}
</code></pre>
</section>
<section>
<h4 class="slide_title">Attempt 1: Edge List</h4>
<p style="text-decoration: underline;">Data Model</p>
<dl>
<div class="fragment">
<dt>A List of Edges</dt>
<dd>ArrayBuffer</dd>
</div>
<div class="fragment">
<dt>A List of Vertices</dt>
<dd>ArrayBuffer</dd>
</div>
</ul>
</section>
<section>
<h4 class="slide_title">Attempt 1: Edge List</h4>
<pre><code class="scala">
class DirectedGraphV1[V, E] extends Graph[V, E]
{
val vertices = mutable.Buffer[Vertex]()
val edges = mutable.Buffer[Edge]()
/* ... */
}
</code></pre>
</section>
<section>
<h4 class="slide_title">Attempt 1: Edge List</h4>
<pre><code class="scala">
def addVertex(label: V): Vertex =
vertices.append(new Vertex(label))
</code></pre>
<p class="fragment">What's the complexity?</p>
</section>
<section>
<h4 class="slide_title">Attempt 1: Edge List</h4>
<pre><code class="scala">
def addEdge(orig: Vertex, dest: Vertex, label: E): Edge =
edges.append(new Edge(orig, dest, label))
</code></pre>
<p class="fragment">What's the complexity?</p>
</section>
<section>
<h4 class="slide_title">Attempt 1: Edge List</h4>
<pre><code class="scala">
def removeEdge(edge: Edge): Unit =
edges.subtractOne(edge)
</code></pre>
<p class="fragment">What's the complexity? <b class="fragment">($O(n)$)</b></p>
</section>
<section>
<h4 class="slide_title">Attempt 2: Linked Edge List</h4>
<p style="text-decoration: underline;">Data Model</p>
<dl>
<div>
<dt>A List of Edges</dt>
<dd>DoublyLinkedList</dd>
</div>
<div>
<dt>A List of Vertices</dt>
<dd>DoublyLinkedList</dd>
</div>
</ul>
</section>
<section>
<h4 class="slide_title">DoublyLinkedList</h4>
<pre><code class="scala">
class DoublyLinkedList[T] extends Seq[T] {
def append(element: T): Node =
/* O(1) with tail pointer */
def remove(node: Node): Unit =
/* O(1) */
def iterator: Iterator[T]: Unit =
/* O(1) + O(1) per call to next */
}
</code></pre>
</section>
<section>
<h4 class="slide_title">Attempt 2: Linked Edge List</h4>
<pre><code class="scala">
class DirectedGraphV2[V, E] extends Graph[V, E] {
val vertices = DoublyLinkedList[Vertex]()
class Vertex(label: V) = {
var node: DoublyLinkedList[Vertex].Node = null
/* ... */
}
def addVertex(label: V): Vertex = {
val vertex = new Vertex(label)
val node = vertices.append(vertex)
vertex.node = node
return vertex
}
/* ... */
}
</code></pre>
<p class="fragment">What's the complexity?</p>
</section>
<section>
<h4 class="slide_title">Attempt 2: Linked Edge List</h4>
<pre><code class="scala">
class DirectedGraphV2[V, E] extends Graph[V, E] {
val edges = DoublyLinkedList[Edge]()
class Edge(orig: Vertex, dest: Vertex, label: E) = {
var node: DoublyLinkedList[Edge].Node = null
/* ... */
}
def addEdge(orig: Vertex, dest: Vertex, label: E): Vertex = {
val edge = new Edge(orig, dest, label)
val node = edges.append(vertex)
edge.node = node
return edge
}
/* ... */
}
</code></pre>
<p class="fragment">What's the complexity?</p>
</section>
<section>
<h4 class="slide_title">Attempt 2: Linked Edge List</h4>
<pre><code class="scala">
class DirectedGraphV2[V, E] extends Graph[V, E] {
val edges = DoublyLinkedList[Edge]()
def removeEdge(edge: Edge): Unit = {
edges.remove(edge.node)
}
/* ... */
}
</code></pre>
<p class="fragment">What's the complexity?</p>
</section>
<section>
<h4 class="slide_title">Attempt 2: Linked Edge List</h4>
<pre><code class="scala">
class DirectedGraphV2[V, E] extends Graph[V, E] {
val vertices = DoublyLinkedList[Vertex]()
def removeVertex(vertex: Vertex): Unit = {
vertices.remove(vertex.node)
}
/* ... */
}
</code></pre>
<p class="fragment">What if there's an edge to/from vertex?</p>
</section>
<section>
<h4 class="slide_title">Attempt 2: Linked Edge List</h4>
<pre><code class="scala">
class DirectedGraphV2[V, E] extends Graph[V, E] {
val vertices = DoublyLinkedList[Vertex]()
def removeVertex(vertex: Vertex): Unit = {
vertices.remove(vertex.node)
for(edge <- vertex.incidentEdges){
removeEdge(edge)
}
}
/* ... */
}
</code></pre>
<p class="fragment">What's the complexity? <b class="fragment">($O(1) + O(T_{incidentEdges}(n, m))$)</b></p>
</section>
<section>
<h4 class="slide_title">Attempt 2: Linked Edge List</h4>
<pre><code class="scala">
class DirectedGraphV2[V, E] extends Graph[V, E] {
val vertices = DoublyLinkedList[Vertex]()
val edges = DoublyLinkedList[Edge]()
class Vertex(label: V) = {
/* ... */
def outEdges =
vertices.filter { _.orig = this }
def inEdges =
vertices.filter { _.dest = this }
}
/* ... */
}
</code></pre>
<p class="fragment">What's the complexity? <b class="fragment">($O(m) = O(n^2)$)</b></p>
</section>
<section>
<h4 class="slide_title">Edge List Summary</h4>
<ul>
<li>addEdge, addVertex: <b class="fragment">$O(1)$</b></li>
<li>removeEdge: <b class="fragment">$O(1)$</b></li>
<li>removeVertex: <b class="fragment">$O(m)$</b></li>
<li>vertex.incidentEdges: <b class="fragment">$O(m)$</b></li>
<li class="fragment">vertex.edgeTo: <b class="fragment">$O(m)$</b></li>
<li class="fragment"><b>Space Used</b>: $O(n) + O(m)$</li>
</ul>
</section>
<section>
<p><b>Idea: </b> Store the in/out edges for each vertex.</p>
</section>
<section>
<h4 class="slide_title">Attempt 3: Adjacency List</h4>
<pre><code class="scala">
class DirectedGraphV3[V, E] extends Graph[V, E] {
val vertices = DoublyLinkedList[Vertex]()
class Vertex(label: V) = {
var node: DoublyLinkedList[Vertex].Node = null
val inEdges = DoublyLinkedList[Edge]()
val outEdges = DoublyLinkedList[Edge]()
/* ... */
}
/* ... */
}
</code></pre>
</section>
<section>
<h4 class="slide_title">Attempt 3: Adjacency List</h4>
<pre><code class="scala">
class DirectedGraphV3[V, E] extends Graph[V, E] {
/* ... */
def addEdge(orig: Vertex, dest: Vertex, label: E): Vertex = {
val edge = new Edge(orig, dest, label)
val node = edges.append(vertex)
edge.node = node
orig.outEdges.append(edge)
dest.inEdges.append(edge)
return edge
}
/* ... */
}
</code></pre>
<p class="fragment">What's the complexity?</p>
</section>
<section>
<h4 class="slide_title">Attempt 3: Adjacency List</h4>
<pre><code class="scala">
class DirectedGraphV3[V, E] extends Graph[V, E] {
/* ... */
def removeEdge(edge: Edge): Unit = {
edges.remove(edge.node)
edge.orig.outEdges.subtractOne(edge)
edge.dest.inEdges.subtractOne(edge)
}
/* ... */
}
</code></pre>
<p class="fragment">What's the complexity?</p>
</section>
<section>
<h4 class="slide_title">Attempt 4: Adjacency List</h4>
<pre><code class="scala">
class DirectedGraphV4[V, E] extends Graph[V, E] {
/* ... */
class Edge(orig: Vertex, dest: Vertex, label: E) = {
var node: DoublyLinkedList[Edge].Node = null
var origNode: DoublyLinkedList[Edge].Node = null
var destNode: DoublyLinkedList[Edge].Node = null
/* ... */
}
/* ... */
}
</code></pre>
</section>
<section>
<h4 class="slide_title">Attempt 4: Adjacency List</h4>
<pre><code class="scala">
class DirectedGraphV4[V, E] extends Graph[V, E] {
/* ... */
def addEdge(orig: Vertex, dest: Vertex, label: E): Vertex = {
val edge = new Edge(orig, dest, label)
val node = edges.append(vertex)
edge.node = node
edge.origNode = orig.outEdges.append(edge)
edge.destNode = dest.inEdges.append(edge)
return edge
}
/* ... */
}
</code></pre>
<p class="fragment">What's the complexity?</p>
</section>
<section>
<h4 class="slide_title">Attempt 4: Adjacency List</h4>
<pre><code class="scala">
class DirectedGraphV4[V, E] extends Graph[V, E] {
/* ... */
def removeEdge(edge: Edge): Unit = {
edges.remove(edge.node)
edge.orig.outEdges.remove(edge.origNode)
edge.dest.inEdges.remove(edge.destNode)
}
/* ... */
}
</code></pre>
<p class="fragment">What's the complexity?</p>
</section>
<section>
<h4 class="slide_title">Attempt 4: Adjacency List</h4>
<pre><code class="scala">
class DirectedGraphV4[V, E] extends Graph[V, E] {
/* ... */
def removeVertex(vertex: Vertex): Unit = {
vertices.remove(vertex.node)
for(edge <- vertex.incidentEdges){
removeEdge(edge)
}
}
/* ... */
}
</code></pre>
<p class="fragment">What's the complexity?</p>
</section>
<section>
<h4 class="slide_title">Adjacency List</h4>
<svg data-src="graphics/15b/adjacency_list.svg" width="700px"/>
</section>
<section>
<h4 class="slide_title">Adjacency List Summary</h4>
<ul>
<li>addEdge, addVertex: <b class="fragment">$O(1)$</b></li>
<li>removeEdge: <b class="fragment">$O(1)$</b></li>
<li>vertex.incidentEdges: <b class="fragment">$O(deg(vertex))$</b></li>
<li>removeVertex: <b class="fragment">$O(deg(vertex))$</b></li>
<li class="fragment">vertex.edgeTo: <b class="fragment">$O(deg(vertex))$</b></li>
<li class="fragment"><b>Space Used</b>: $O(n) + O(m)$</li>
</ul>
</section>
<section>
<h4 class="slide_title">Adjacency Matrix</h4>
<img src="graphics/15b/adjacency_matrix.png">
</section>
<section>
<h4 class="slide_title">Adjacency Matrix Summary</h4>
<ul>
<li>addEdge, removeEdge: <b class="fragment">$O(1)$</b></li>
<li>addVertex, removeVertex: <b class="fragment">$O(n^2)$</b></li>
<li>vertex.incidentEdges: <b class="fragment">$O(n)$</b></li>
<li>vertex.edgeTo: <b class="fragment">$O(1)$</b></li>
<li class="fragment"><b>Space Used</b>: $O(n^2)$</li>
</ul>
</section>

View File

@ -0,0 +1,510 @@
---
template: templates/cse250_2022_slides.erb
title: Graph Exploration
date: Oct 7, 2022
textbook: Ch. 15.3
cat: graphics/16b/cat.png
attribution: Based on slides by Tamassa Goodrich
---
<section>
<h4 class="slide_title">Edge List Summary</h4>
<ul>
<li>addEdge, addVertex: <b>$O(1)$</b></li>
<li>removeEdge: <b>$O(1)$</b></li>
<li>removeVertex: <b>$O(m)$</b></li>
<li>vertex.incidentEdges: <b>$O(m)$</b></li>
<li>vertex.edgeTo: <b>$O(m)$</b></li>
<li><b>Space Used</b>: $O(n) + O(m)$</li>
</ul>
</section>
<section>
<h4 class="slide_title">Adjacency List Summary</h4>
<ul>
<li>addEdge, addVertex: <b>$O(1)$</b></li>
<li>removeEdge: <b>$O(1)$</b></li>
<li>vertex.incidentEdges: <b>$O(deg(vertex))$</b></li>
<li>removeVertex: <b>$O(deg(vertex))$</b></li>
<li>vertex.edgeTo: <b>$O(deg(vertex))$</b></li>
<li><b>Space Used</b>: $O(n) + O(m)$</li>
</ul>
</section>
<section>
<h4 class="slide_title">Adjacency Matrix Summary</h4>
<ul>
<li>addEdge, removeEdge: <b>$O(1)$</b></li>
<li>addVertex, removeVertex: <b>$O(n^2)$</b></li>
<li>vertex.incidentEdges: <b>$O(n)$</b></li>
<li>vertex.edgeTo: <b>$O(1)$</b></li>
<li><b>Space Used</b>: $O(n^2)$</li>
</ul>
</section>
<section>
<p>Ok, we have a graph, now what do we do with it?</p>
</section>
<section>
<h4 class="slide_title">Connectivity Problems</h4>
<p>Given graph $G$:</p>
<ul>
<li class="fragment">Is vertex $u$ <b>adjacent</b> to $v$?</li>
<li class="fragment">Is vertex $u$ <b>connected</b> to $v$ via some path?</li>
<li class="fragment">Which vertices are connected to vertex $v$?</li>
<li class="fragment">What is the shortest path from vertex $u$ to $v$?</li>
</ul>
</section>
<section>
<h4 class="slide_title">A few more definitions...</h4>
<svg data-src="graphics/16b/subgraph-and-spanning.svg" width="200px" style="float: right"/>
<dl style="width: 700px">
<dt>A <u>subgraph</u> $S$ of a graph $G$ is a graph where...</dt>
<dd>$S$'s vertices are a subset of $G$'s vertices</dd>
<dd>$S$'s edges are a subset of $G$'s edges</dd>
<div class="fragment">
<dt>A <u>spanning subgraph</u> of $G$...</dt>
<dd>Is a subgraph of $G$</dd>
<dd>Contains all of $G$'s vertices.</dd>
</div>
</dl>
</section>
<section>
<h4 class="slide_title">A few more definitions...</h4>
<svg data-src="graphics/16b/dis-connected-graph.svg" width="200px" style="float: right"/>
<dl style="width: 700px">
<dt>A graph is <u>connected</u>...</dt>
<dd>If there is a path between every pair of vertices</dd>
<div class="fragment">
<dt>A <u>connected component</u> of $G$...</dt>
<dd>Is a maximal <i>connected</i> subgraph of $G$ <ul>
<li style="font-size: 80%">"maximal" means you can't add any new vertex without breaking the property</li>
<li style="font-size: 80%">Any subset of $G$'s edges that connects the subgraph is fine.</li>
</ul></dd>
</div>
</dl>
</section>
<section>
<h4 class="slide_title">A few more definitions...</h4>
<dl style="font-size: 90%">
<dt>A <u>free tree</u> is an <i>un</i>directed graph $T$ such that:</dt>
<dd>There is exactly one simple path between any two nodes <ul>
<li>T is connected</li>
<li>T has no cycles</li>
</ul></dd>
<div class="fragment">
<dt>A <u>rooted tree</u> is a directed graph $T$ such that:</dt>
<dd>One vertex of $T$ is the <u>root</u></dd>
<dd>There is exactly one simple path from the root to every other vertex in the graph.</dd>
</div>
<div class="fragment">
<dt>A (free/rooted) <u>forest</u> is a graph $F$ such that</dt>
<dd>Every connected component is a tree.</dd>
</div>
</dl>
</section>
<section>
<h4 class="slide_title">A few more definitions...</h4>
<dl>
<dt>A <u>spanning tree</u> of a connected graph...</dt>
<dd>Is a spanning subgraph that is a tree.</dd>
<dd>Is <i>not</i> unique unless the graph is a tree.</dd>
</dl>
<svg data-src="graphics/16b/spanning-tree.svg" />
</section>
<section>
<p>Ok... back to the question: Connectivity!</p>
</section>
<section>
<p>The maze is a graph!</p>
<svg data-src="graphics/16b/maze-is-graph.svg" />
</section>
<section>
<h4 class="slide_title">Recall</h4>
<dl>
<dt>Searching the maze with a stack <span class="fragment">(Depth-First Search)</span></dt>
<dd>Try out every path, one at a time to the end...</dd>
<dd>... then backtrack and try another</dd>
<dt>Searching the maze with a queue <span class="fragment">(Breadth-First Search)</span></dt>
<dd>Try out every path in parallel...</dd>
<dd>... keep picking a path to extend by one step.</dd>
</dl>
</section>
<section>
<h4 class="slide_title">Depth-First Search</h4>
<p><u>Primary Goals</u></p>
<ul>
<li>Visit every vertex in graph $G = (V, E)$</li>
<li>Construct a spanning tree for every connected component <ul style="font-size: 80%">
<li class="fragment"><b>Side Effect:</b> Compute connected components</li>
<li class="fragment"><b>Side Effect:</b> Compute a paths between all connected vertices</li>
<li class="fragment"><b>Side Effect:</b> Determine if the graph is connected</li>
<li class="fragment"><b>Side Effect:</b> Identify Cycles</li>
</ul></li>
<li class="fragment">Complete in time $O(|V| + |E|)$</li>
</ul>
</section>
<section>
<h4 class="slide_title">Depth-First Search</h4>
<dl>
<dt>DFS</dt>
<dd><b>Input:</b> Graph $G$</dd>
<dd><b>Output:</b> Label every edge as: <ul>
<li><u>Spanning Edge</u>: Part of the spanning tree</li>
<li><u>Back Edge</u>: Part of a cycle</li>
</ul></dd>
<div class="fragment">
<dt>DFSOne</dt>
<dd><b>Input:</b> Graph $G = (V, E)$, Start Vertex $v \in V$</dd>
<dd><b>Output:</b> Label every edge in $v$'s connected component</dd>
</div>
</dl>
</section>
<section>
<h4 class="slide_title">Depth-First Search</h4>
<svg data-src="graphics/16b/dfs-one-intuition.svg" />
</section>
<section>
<h4 class="slide_title">Depth-First Search</h4>
<pre><code class="scala">object VertexLabel extends Enumeration
{ val UNEXPLORED, VISITED = Value }
object EdgeLabel extends Enumeration
{ val UNEXPLORED, SPANNING, BACK = Value }
def DFS(graph: Graph[VertexLabel.Value, EdgeLabel.Value])
{
for(v <- graph.vertices) { v.setLabel(VertexLabel.UNEXPLORED) }
for(e <- graph.edges) { e.setLabel(EdgeLabel.UNEXPLORED) }
for(v <- graph.vertices) {
if(v.label == VertexLabel.UNEXPLORED){
DFSOne(graph, v)
}
}
} </code></pre>
</section>
<section>
<h4 class="slide_title">Depth-First Search</h4>
<pre><code class="scala">def DFSOne(graph: Graph[…], v: Graph[…]#Vertex)
{
v.setLabel(VertexLabel.VISITED)
for(e <- v.incident) {
if(e.label == EdgeLabel.UNEXPLORED){
val w = e.getOpposite(v)
if(w.label == VertexLabel.UNEXPLORED){
e.setLabel(EdgeLabel.SPANNING)
DFSOne(graph, w)
} else {
e.setLabel(EdgeLabel.BACK)
}
}
}
} </code></pre>
</section>
<section>
<h4 class="slide_title">Depth-First Search</h4>
<svg data-src="graphics/16b/dfs-one-example.svg" />
</section>
<section>
<h4 class="slide_title">DFS vs Mazes</h4>
<p>The DFS algorithm is like our stack-based maze solver</p>
<ul>
<li>Mark each grid square with <b>VISITED</b>.</li>
<li>Mark each path with <b>SPANNING</b>.</li>
<li>Only visit each vertex once.<ul>
<li class="fragment">DFS won't necessarily find the shortest paths.</li>
</ul></li>
</ul>
</section>
<section>
<p>What's the complexity?</p>
</section>
<section>
<pre><code class="scala">def DFS(graph: Graph[VertexLabel.Value, EdgeLabel.Value])
{
for(v <- graph.vertices) { v.setLabel(VertexLabel.UNEXPLORED) }
for(e <- graph.edges) { e.setLabel(EdgeLabel.UNEXPLORED) }
for(v <- graph.vertices) {
if(v.label == VertexLabel.UNEXPLORED){
DFSOne(graph, v)
}
}
} </code></pre>
</section>
<section>
<pre><code class="scala">def DFS(graph: Graph[VertexLabel.Value, EdgeLabel.Value])
{
/* O(|V|) */
for(e <- graph.edges) { e.setLabel(EdgeLabel.UNEXPLORED) }
for(v <- graph.vertices) {
if(v.label == VertexLabel.UNEXPLORED){
DFSOne(graph, v)
}
}
} </code></pre>
</section>
<section>
<pre><code class="scala">def DFS(graph: Graph[VertexLabel.Value, EdgeLabel.Value])
{
/* O(|V|) */
/* O(|E|) */
for(v <- graph.vertices) {
if(v.label == VertexLabel.UNEXPLORED){
DFSOne(graph, v)
}
}
} </code></pre>
</section>
<section>
<pre><code class="scala">def DFS(graph: Graph[VertexLabel.Value, EdgeLabel.Value])
{
/* O(|V|) */
/* O(|E|) */
/* O(|V|) Times */ {
if(v.label == VertexLabel.UNEXPLORED){
DFSOne(graph, v)
}
}
} </code></pre>
</section>
<section>
<pre><code class="scala">def DFS(graph: Graph[VertexLabel.Value, EdgeLabel.Value])
{
/* O(|V|) */
/* O(|E|) */
/* O(|V|) Times */ {
if(v.label == VertexLabel.UNEXPLORED){
/* ??? */
}
}
} </code></pre>
</section>
<section>
<pre><code class="scala">def DFSOne(graph: Graph[…], v: Graph[…]#Vertex)
{
v.setLabel(VertexLabel.VISITED)
for(e <- v.incident) {
if(e.label == EdgeLabel.UNEXPLORED){
val w = e.getOpposite(v)
if(w.label == VertexLabel.UNEXPLORED){
e.setLabel(EdgeLabel.SPANNING)
DFSOne(graph, w)
} else {
e.setLabel(EdgeLabel.BACK)
}
}
}
} </code></pre>
</section>
<section>
<pre><code class="scala">def DFSOne(graph: Graph[…], v: Graph[…]#Vertex)
{
/* O(1) */
for(e <- v.incident) {
if(e.label == EdgeLabel.UNEXPLORED){
val w = e.getOpposite(v)
if(w.label == VertexLabel.UNEXPLORED){
e.setLabel(EdgeLabel.SPANNING)
DFSOne(graph, w)
} else {
e.setLabel(EdgeLabel.BACK)
}
}
}
} </code></pre>
</section>
<section>
<pre><code class="scala">def DFSOne(graph: Graph[…], v: Graph[…]#Vertex)
{
/* O(1) */
/* O(deg(v)) times */ {
if(e.label == EdgeLabel.UNEXPLORED){
val w = e.getOpposite(v)
if(w.label == VertexLabel.UNEXPLORED){
e.setLabel(EdgeLabel.SPANNING)
DFSOne(graph, w)
} else {
e.setLabel(EdgeLabel.BACK)
}
}
}
} </code></pre>
</section>
<section>
<pre><code class="scala">def DFSOne(graph: Graph[…], v: Graph[…]#Vertex)
{
/* O(1) */
/* O(deg(v)) times */ {
/* O(1) */ {
/* O(1) */
/* O(1) */ {
/* O(1) */
DFSOne(graph, w)
} else {
/* O(1) */
}
}
}
} </code></pre>
</section>
<section>
<pre><code class="scala">def DFSOne(graph: Graph[…], v: Graph[…]#Vertex)
{
/* O(1) */
/* O(deg(v)) times */ {
/* O(1) */ {
/* O(1) */
/* O(1) */ {
/* O(1) */
/* ??? */
} else {
/* O(1) */
}
}
}
} </code></pre>
</section>
<section>
<h4 class="slide_title">Depth-First Search</h4>
<p><b>Observation: </b> <tt>DFSOne</tt> is called on each vertex <i>at most</i> once.</p>
<ul>
<li>If <tt>v.label == VISITED</tt>, both <tt>DFS</tt>, <tt>DFSOne</tt> skip it.</li>
</ul>
<p class="fragment">$O(|V|)$ calls to <tt>DFSOne</tt></p>
<p class="fragment">What's the runtime of <tt>DFSOne</tt> <b>excluding recursive calls</b>?</p>
</section>
<section>
<pre><code class="scala">
def DFSOne(graph: Graph[…], v: Graph[…]#Vertex)
{
/* O(1) */
/* O(deg(v)) times */ {
/* O(1) */ {
/* O(1) */
/* O(1) */ {
/* O(1) */
DFSOne(graph, w)
} else {
/* O(1) */
}
}
}
} </code></pre>
</section>
<section>
<h4 class="slide_title">Depth-First Search</h4>
<p>
What's the sum over all calls to <tt>DFSOne</tt>?
</p>
<p class="fragment">
$\sum_{v \in V} O(deg(v))$
</p>
<p class="fragment">
$ = O(\sum_{v \in V} deg(v))$
</p>
<p class="fragment">
$ = O(2 |E|)$ (by rule)
</p>
<p class="fragment">
$ = O(|E|)$
</p>
</section>
<section>
<h4 class="slide_title">Depth-First Search</h4>
<p>Summing up...</p>
<table>
<tr class="fragment">
<td>Mark Vertices <b>UNVISITED</b></td>
<td class="fragment">$O(|V|)$</td>
</tr>
<tr class="fragment">
<td>Mark Edges <b>UNVISITED</b></td>
<td class="fragment">$O(|E|)$</td>
</tr>
<tr class="fragment">
<td><tt>DFS</tt> Vertex Loop</td>
<td class="fragment">$O(|V|)$</td>
</tr>
<tr class="fragment">
<td>All Calls to <tt>DFSOne</tt></td>
<td class="fragment">$O(|E|)$</td>
</tr>
<tr>
<td></td>
<td class="fragment"><span style="border-top: solid 1px black; padding-top: 15px">$O(|V| + |E|)$</span></td>
</tr>
</table>
</section>

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 KiB

View File

@ -0,0 +1,620 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
version="1.1"
id="svg2"
xml:space="preserve"
width="3.5571268in"
height="3.6219573in"
viewBox="0 0 341.48417 347.7079"
sodipodi:docname="maze1-distances.svg"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata
id="metadata8"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs6"><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath34"><path
d="M 0,0 H 6.048 V 6.048 H 0 Z"
id="path32" /></clipPath><radialGradient
fx="1.96873"
fy="4.3134899"
cx="3.0239"
cy="3.0239"
r="3.0239"
gradientUnits="userSpaceOnUse"
id="radialGradient46"><stop
style="stop-opacity:1;stop-color:#e0e0f4"
offset="0"
id="stop36" /><stop
style="stop-opacity:1;stop-color:#6666c6"
offset="0.93788"
id="stop38" /><stop
style="stop-opacity:1;stop-color:#24247d"
offset="1.87576"
id="stop40" /><stop
style="stop-opacity:1;stop-color:#191959"
offset="2.5792"
id="stop42" /><stop
style="stop-opacity:1;stop-color:#ffffff"
offset="3.0239"
id="stop44" /></radialGradient></defs><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1011"
id="namedview4"
showgrid="false"
units="in"
inkscape:zoom="2.7489444"
inkscape:cx="215.1735"
inkscape:cy="212.44518"
inkscape:window-x="1080"
inkscape:window-y="352"
inkscape:window-maximized="1"
inkscape:current-layer="g10"
inkscape:document-rotation="0"
inkscape:pagecheckerboard="0"
inkscape:document-units="in" /><g
id="g10"
inkscape:groupmode="layer"
inkscape:label="04-Stacks_and_Queues-presentation"
transform="matrix(1.3333333,0,0,-1.3333333,-134.24879,132.5345)"><g
id="g4948"
transform="matrix(2.8274324,0,0,2.8274324,520.46247,-307.16639)"><g
id="g90"
transform="translate(-140.10158,51.959894)"><path
d="M 0.16353,16.36383 H 81.65564 M 0.16353,32.72768 H 81.65564 M 0.16353,49.0915 H 81.65564 M 0.16353,65.45537 H 81.65564 M 16.36383,0.16353 V 81.65564 M 32.72768,0.16353 V 81.65564 M 49.0915,0.16353 V 81.65564 M 65.45537,0.16353 v 81.49211"
style="fill:none;stroke:#1919ff;stroke-width:0.19925;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="path92" /></g><g
id="g94"
transform="translate(-140.10158,51.959894)"><path
d="M 0,0 V 81.8192 H 81.8192 V 0 Z"
style="fill:none;stroke:#000000;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="path96" /></g><path
d="m -131.61326,132.28467 v 2.98883"
style="fill:none;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="path98" /><g
id="g100"
transform="translate(-131.61326,51.959894)"><g
id="g102"
transform="matrix(0.75,0,0,0.75,-2.045,86.303)"><g
id="g104"><g
id="g106"
transform="translate(-54.948,-153.352)"><text
transform="matrix(1,0,0,-1,54.948,153.352)"
style="font-variant:normal;font-size:10.9091px;font-family:'Nimbus Roman';-inkscape-font-specification:NimbusRomNo9L-Regu;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text110"><tspan
x="0"
y="0"
id="tspan108">0</tspan></text><g
id="g112"
transform="translate(54.948,153.352)" /></g></g><g
id="g114"
transform="translate(2.045,-86.303)" /></g></g><path
d="m -115.24943,132.28467 v 2.98883"
style="fill:none;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="path116" /><g
id="g118"
transform="translate(-131.61326,51.959894)"><g
id="g120"
transform="matrix(0.75,0,0,0.75,14.318,86.189)"><g
id="g122"><g
id="g124"
transform="translate(-71.311,-153.238)"><text
transform="matrix(1,0,0,-1,71.311,153.238)"
style="font-variant:normal;font-size:10.9091px;font-family:'Nimbus Roman';-inkscape-font-specification:NimbusRomNo9L-Regu;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text128"><tspan
x="0"
y="0"
id="tspan126">1</tspan></text><g
id="g130"
transform="translate(71.311,153.238)" /></g></g><g
id="g132"
transform="translate(-14.318,-86.189)" /></g></g><path
d="m -98.885589,132.28467 v 2.98883"
style="fill:none;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="path134" /><g
id="g136"
transform="translate(-131.61326,51.959894)"><g
id="g138"
transform="matrix(0.75,0,0,0.75,30.682,86.189)"><g
id="g140"><g
id="g142"
transform="translate(-87.675,-153.238)"><text
transform="matrix(1,0,0,-1,87.675,153.238)"
style="font-variant:normal;font-size:10.9091px;font-family:'Nimbus Roman';-inkscape-font-specification:NimbusRomNo9L-Regu;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text146"><tspan
x="0"
y="0"
id="tspan144">2</tspan></text><g
id="g148"
transform="translate(87.675,153.238)" /></g></g><g
id="g150"
transform="translate(-30.682,-86.189)" /></g></g><path
d="m -82.521808,132.28467 v 2.98883"
style="fill:none;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="path152" /><g
id="g154"
transform="translate(-131.61326,51.959894)"><g
id="g156"
transform="matrix(0.75,0,0,0.75,47.046,86.303)"><g
id="g158"><g
id="g160"
transform="translate(-104.039,-153.352)"><text
transform="matrix(1,0,0,-1,104.039,153.352)"
style="font-variant:normal;font-size:10.9091px;font-family:'Nimbus Roman';-inkscape-font-specification:NimbusRomNo9L-Regu;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text164"><tspan
x="0"
y="0"
id="tspan162">3</tspan></text><g
id="g166"
transform="translate(104.039,153.352)" /></g></g><g
id="g168"
transform="translate(-47.046,-86.303)" /></g></g><path
d="m -66.157938,132.28467 v 2.98883"
style="fill:none;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="path170" /><g
id="g172"
transform="translate(-131.61326,51.959894)"><g
id="g174"
transform="matrix(0.75,0,0,0.75,63.409,86.189)"><g
id="g176"><g
id="g178"
transform="translate(-120.402,-153.238)"><text
transform="matrix(1,0,0,-1,120.402,153.238)"
style="font-variant:normal;font-size:10.9091px;font-family:'Nimbus Roman';-inkscape-font-specification:NimbusRomNo9L-Regu;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text182"><tspan
x="0"
y="0"
id="tspan180">4</tspan></text><g
id="g184"
transform="translate(120.402,153.238)" /></g></g><g
id="g186"
transform="translate(-63.409,-86.189)" /></g></g><path
d="m -130.11884,133.77909 h -2.98884"
style="fill:none;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="path188" /><g
id="g190"
transform="translate(-140.10158,43.471622)"><g
id="g192"
transform="matrix(0.75,0,0,0.75,-8.462,79.085)"><g
id="g194"><g
id="g196"
transform="translate(-48.531,-146.134)"><text
transform="matrix(1,0,0,-1,48.531,146.134)"
style="font-variant:normal;font-size:10.9091px;font-family:'Nimbus Roman';-inkscape-font-specification:NimbusRomNo9L-Regu;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text200"><tspan
x="0"
y="0"
id="tspan198">0</tspan></text><g
id="g202"
transform="translate(48.531,146.134)" /></g></g><g
id="g204"
transform="translate(8.462,-79.085)" /></g></g><path
d="M -138.60716,108.92694 H -141.596"
style="fill:none;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="path206" /><g
id="g208"
transform="translate(-140.10158,43.471622)"><g
id="g210"
transform="matrix(0.75,0,0,0.75,-8.462,62.664)"><g
id="g212"><g
id="g214"
transform="translate(-48.531,-129.713)"><text
transform="matrix(1,0,0,-1,48.531,129.713)"
style="font-variant:normal;font-size:10.9091px;font-family:'Nimbus Roman';-inkscape-font-specification:NimbusRomNo9L-Regu;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text218"><tspan
x="0"
y="0"
id="tspan216">1</tspan></text><g
id="g220"
transform="translate(48.531,129.713)" /></g></g><g
id="g222"
transform="translate(8.462,-62.664)" /></g></g><path
d="M -138.60716,92.563115 H -141.596"
style="fill:none;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="path224" /><g
id="g226"
transform="translate(-140.10158,43.471622)"><g
id="g228"
transform="matrix(0.75,0,0,0.75,-8.462,46.301)"><g
id="g230"><g
id="g232"
transform="translate(-48.531,-113.35)"><text
transform="matrix(1,0,0,-1,48.531,113.35)"
style="font-variant:normal;font-size:10.9091px;font-family:'Nimbus Roman';-inkscape-font-specification:NimbusRomNo9L-Regu;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text236"><tspan
x="0"
y="0"
id="tspan234">2</tspan></text><g
id="g238"
transform="translate(48.531,113.35)" /></g></g><g
id="g240"
transform="translate(8.462,-46.301)" /></g></g><path
d="M -138.60716,76.199302 H -141.596"
style="fill:none;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="path242" /><g
id="g244"
transform="translate(-140.10158,43.471622)"><g
id="g246"
transform="matrix(0.75,0,0,0.75,-8.462,29.994)"><g
id="g248"><g
id="g250"
transform="translate(-48.531,-97.043)"><text
transform="matrix(1,0,0,-1,48.531,97.043)"
style="font-variant:normal;font-size:10.9091px;font-family:'Nimbus Roman';-inkscape-font-specification:NimbusRomNo9L-Regu;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text254"><tspan
x="0"
y="0"
id="tspan252">3</tspan></text><g
id="g256"
transform="translate(48.531,97.043)" /></g></g><g
id="g258"
transform="translate(8.462,-29.994)" /></g></g><path
d="M -138.60716,59.835452 H -141.596"
style="fill:none;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="path260" /><g
id="g262"
transform="translate(-140.10158,43.471622)"><g
id="g264"
transform="matrix(0.75,0,0,0.75,-8.462,13.573)"><g
id="g266"><g
id="g268"
transform="translate(-48.531,-80.622)"><text
transform="matrix(1,0,0,-1,48.531,80.622)"
style="font-variant:normal;font-size:10.9091px;font-family:'Nimbus Roman';-inkscape-font-specification:NimbusRomNo9L-Regu;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text272"><tspan
x="0"
y="0"
id="tspan270">4</tspan></text><g
id="g274"
transform="translate(48.531,80.622)" /></g></g><g
id="g276"
transform="translate(8.462,-13.573)" /></g></g><g
id="g278"
transform="translate(-140.10158,51.959894)"><g
id="g280"
transform="matrix(1.5,0,0,1.5,1.816,67.741)"><g
id="g282"><g
id="g284"
transform="translate(-58.809,-134.79)"><text
transform="matrix(1,0,0,-1,58.809,134.79)"
style="font-variant:normal;font-size:10.9091px;font-family:'Nimbus Sans';-inkscape-font-specification:NimbusSanL-Regu;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text288"><tspan
x="0"
y="0"
id="tspan286">O</tspan></text><g
id="g290"
transform="translate(58.809,134.79)" /></g></g><g
id="g292"
transform="translate(-1.816,-67.741)" /></g></g><g
id="g294"
transform="translate(-140.10158,51.959894)"><g
id="g296"
transform="matrix(1.5,0,0,1.5,68.179,67.725)"><g
id="g298"><g
id="g300"
transform="translate(-125.172,-134.774)"><text
transform="matrix(1,0,0,-1,125.172,134.774)"
style="font-variant:normal;font-size:10.9091px;font-family:'Nimbus Sans';-inkscape-font-specification:NimbusSanL-Regu;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text304"><tspan
x="0"
y="0"
id="tspan302">X</tspan></text><g
id="g306"
transform="translate(125.172,134.774)" /></g></g><g
id="g308"
transform="translate(-68.179,-67.725)" /></g></g><g
id="g310"
transform="translate(-140.10158,51.959894)"><path
d="M 16.36383,49.0915 V 65.45537 H 65.45537 V 49.0915 Z"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path312" /></g><g
id="g314"
transform="translate(-140.10158,51.959894)"><path
d="M 16.36383,16.36383 V 49.0915 H 32.72768 V 16.36383 Z"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path316" /></g><g
id="g318"
transform="translate(-140.10158,51.959894)"><path
d="M 49.0915,16.36383 V 49.0915 H 65.45537 V 16.36383 Z"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path320" /></g><path
d="M -138.60716,125.90349 H -141.596"
style="fill:none;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="path4950" /></g><g
id="g27515"
class="fragment"><text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.75"
x="281.18353"
y="-41.621716"
id="text3554"
transform="scale(1,-1)"><tspan
sodipodi:role="line"
id="tspan3552"
style="font-weight:bold;stroke-width:0.75"
x="281.18353"
y="-41.621716">1</tspan></text><text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.75"
x="327.06552"
y="4.0303702"
id="text15840"
transform="scale(1,-1)"><tspan
sodipodi:role="line"
id="tspan15838"
style="font-weight:bold;stroke-width:0.75"
x="327.06552"
y="4.0303702">1</tspan></text></g><g
id="g27521"
class="fragment"><text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.75"
x="234.68353"
y="-41.621716"
id="text6146"
transform="scale(1,-1)"><tspan
sodipodi:role="line"
id="tspan6144"
style="font-weight:bold;stroke-width:0.75"
x="234.68353"
y="-41.621716">2</tspan></text><text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.75"
x="327.06552"
y="49.030373"
id="text15844"
transform="scale(1,-1)"><tspan
sodipodi:role="line"
id="tspan15842"
style="font-weight:bold;stroke-width:0.75"
x="327.06552"
y="49.030373">2</tspan></text></g><g
id="g27531"
class="fragment"><text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.75"
x="189.25583"
y="-41.621716"
id="text12626"
transform="scale(1,-1)"><tspan
sodipodi:role="line"
id="tspan12624"
style="font-weight:bold;stroke-width:0.75"
x="189.25583"
y="-41.621716">3</tspan></text><text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.75"
x="327.06552"
y="94.030373"
id="text16112"
transform="scale(1,-1)"><tspan
sodipodi:role="line"
id="tspan16110"
style="font-weight:bold;stroke-width:0.75"
x="327.06552"
y="94.030373">3</tspan></text></g><g
id="g27537"
class="fragment"><text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.75"
x="327.06552"
y="143.31956"
id="text17117"
transform="scale(1,-1)"><tspan
sodipodi:role="line"
id="tspan17115"
style="font-weight:bold;stroke-width:0.75"
x="327.06552"
y="143.31956">4</tspan></text><text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.75"
x="142.49802"
y="-41.613903"
id="text27525"
transform="scale(1,-1)"><tspan
sodipodi:role="line"
id="tspan27523"
style="font-weight:bold;stroke-width:0.75"
x="142.49802"
y="-41.613903">4</tspan></text></g><g
id="g27541"
class="fragment"><text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.75"
x="281.20703"
y="143.31956"
id="text17223"
transform="scale(1,-1)"><tspan
sodipodi:role="line"
id="tspan17221"
style="font-weight:bold;stroke-width:0.75"
x="281.20703"
y="143.31956">5</tspan></text></g><g
id="g27545"
class="fragment"><text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.75"
x="234.55463"
y="143.31956"
id="text17905"
transform="scale(1,-1)"><tspan
sodipodi:role="line"
id="tspan17903"
style="font-weight:bold;stroke-width:0.75"
x="234.55463"
y="143.31956">6</tspan></text></g><g
id="g27563"
class="fragment"><text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.75"
x="234.7226"
y="94.02256"
id="text18639"
transform="scale(1,-1)"><tspan
sodipodi:role="line"
id="tspan18637"
style="font-weight:bold;stroke-width:0.75"
x="234.7226"
y="94.02256">7</tspan></text><text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.75"
x="189.08786"
y="143.31956"
id="text21165"
transform="scale(1,-1)"><tspan
sodipodi:role="line"
id="tspan21163"
style="font-weight:bold;stroke-width:0.75"
x="189.08786"
y="143.31956">7</tspan></text></g><g
id="g27575"
class="fragment"><text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.75"
x="234.62885"
y="48.924904"
id="text19367"
transform="scale(1,-1)"><tspan
sodipodi:role="line"
id="tspan19365"
style="font-weight:bold;stroke-width:0.75"
x="234.62885"
y="48.924904">8</tspan></text><text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.75"
x="142.58786"
y="143.31956"
id="text22935"
transform="scale(1,-1)"><tspan
sodipodi:role="line"
id="tspan22933"
style="font-weight:bold;stroke-width:0.75"
x="142.58786"
y="143.31956">8</tspan></text><text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.75"
x="142.58786"
y="94.014748"
id="text23869"
transform="scale(1,-1)"><tspan
sodipodi:role="line"
id="tspan23867"
style="font-weight:bold;stroke-width:0.75"
x="142.58786"
y="94.014748">9</tspan></text><text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.75"
x="136.40427"
y="48.917091"
id="text25419"
transform="scale(1,-1)"><tspan
sodipodi:role="line"
id="tspan25417"
style="font-weight:bold;stroke-width:0.75"
x="136.40427"
y="48.917091">10</tspan></text><text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.75"
x="136.57224"
y="4.0225577"
id="text26533"
transform="scale(1,-1)"><tspan
sodipodi:role="line"
id="tspan26531"
style="font-weight:bold;stroke-width:0.75"
x="136.57224"
y="4.0225577">11</tspan></text></g><g
id="g785"
class="fragment"><text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#ffffff;stroke-width:0.75"
x="233.52338"
y="2.8437288"
id="text12626-3"
transform="scale(1,-1)"><tspan
sodipodi:role="line"
id="tspan12624-6"
style="font-weight:bold;fill:#ffffff;stroke-width:0.75"
x="233.52338"
y="2.8437288">∞</tspan></text><text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#ffffff;stroke-width:0.75"
x="280.02338"
y="2.8437288"
id="text749"
transform="scale(1,-1)"><tspan
sodipodi:role="line"
id="tspan747"
style="font-weight:bold;fill:#ffffff;stroke-width:0.75"
x="280.02338"
y="2.8437288">∞</tspan></text><text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#ffffff;stroke-width:0.75"
x="280.02338"
y="47.843731"
id="text753"
transform="scale(1,-1)"><tspan
sodipodi:role="line"
id="tspan751"
style="font-weight:bold;fill:#ffffff;stroke-width:0.75"
x="280.02338"
y="47.843731">∞</tspan></text><text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#ffffff;stroke-width:0.75"
x="280.02338"
y="94.343727"
id="text757"
transform="scale(1,-1)"><tspan
sodipodi:role="line"
id="tspan755"
style="font-weight:bold;fill:#ffffff;stroke-width:0.75"
x="280.02338"
y="94.343727">∞</tspan></text><text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#ffffff;stroke-width:0.75"
x="188.52338"
y="94.343727"
id="text761"
transform="scale(1,-1)"><tspan
sodipodi:role="line"
id="tspan759"
style="font-weight:bold;fill:#ffffff;stroke-width:0.75"
x="188.52338"
y="94.343727">∞</tspan></text><text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#ffffff;stroke-width:0.75"
x="188.52338"
y="47.843727"
id="text765"
transform="scale(1,-1)"><tspan
sodipodi:role="line"
id="tspan763"
style="font-weight:bold;fill:#ffffff;stroke-width:0.75"
x="188.52338"
y="47.843727">∞</tspan></text><text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#ffffff;stroke-width:0.75"
x="188.52338"
y="2.8437262"
id="text769"
transform="scale(1,-1)"><tspan
sodipodi:role="line"
id="tspan767"
style="font-weight:bold;fill:#ffffff;stroke-width:0.75"
x="188.52338"
y="2.8437262">∞</tspan></text></g></g></svg>

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

View File

@ -0,0 +1,691 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="358.97247mm"
height="145.04407mm"
viewBox="0 0 358.97247 145.04407"
version="1.1"
id="svg5"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
sodipodi:docname="adjacency_list.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4846738"
inkscape:cx="898.54249"
inkscape:cy="177.43893"
inkscape:window-width="1920"
inkscape:window-height="1011"
inkscape:window-x="1080"
inkscape:window-y="352"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs2">
<marker
style="overflow:visible"
id="Arrow1Lend"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1240" />
</marker>
<marker
style="overflow:visible"
id="Arrow1Lstart"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lstart"
inkscape:isstock="true">
<path
transform="matrix(0.8,0,0,0.8,10,0)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1237" />
</marker>
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(95.743232,-18.137903)">
<circle
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="path31"
cx="36.64978"
cy="26.018934"
r="7.3810315" />
<circle
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="path31-3"
cx="87.616486"
cy="26.018934"
r="7.3810315" />
<circle
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="path31-3-6"
cx="138.58315"
cy="26.018934"
r="7.3810315" />
<g
id="g373"
transform="translate(-12.701103,0.61282633)">
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="rect287"
width="14.444621"
height="14.444621"
x="34.906265"
y="54.277321" />
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="rect369"
width="14.444621"
height="14.444621"
x="49.350887"
y="54.277321" />
</g>
<g
id="g379"
transform="translate(38.26559,0.61282633)">
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="rect375"
width="14.444621"
height="14.444621"
x="34.906265"
y="54.277321" />
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="rect377"
width="14.444621"
height="14.444621"
x="49.350887"
y="54.277321" />
</g>
<g
id="g385"
transform="translate(89.232269,0.61282633)">
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="rect381"
width="14.444621"
height="14.444621"
x="34.906265"
y="54.277321" />
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="rect383"
width="14.444621"
height="14.444621"
x="49.350887"
y="54.277321" />
</g>
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
d="M 29.574488,62.357179 35.180684,33.868463"
id="path420" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
d="m 79.845329,62.357179 5.6062,-28.488716"
id="path1593" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
d="M 36.649783,25.452515 43.52895,53.941231"
id="path1597"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
d="m 87.616479,25.452515 6.879167,28.488716"
id="path1736"
sodipodi:nodetypes="cc" />
<g
id="g1742"
transform="translate(89.232269,0.61282633)">
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="rect1738"
width="14.444621"
height="14.444621"
x="34.906265"
y="54.277321" />
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="rect1740"
width="14.444621"
height="14.444621"
x="49.350887"
y="54.277321" />
</g>
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
d="m 138.58315,25.452515 6.87917,28.488716"
id="path1744"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
d="m 130.64537,62.357179 5.6062,-28.488716"
id="path1595" />
<text
xml:space="preserve"
style="font-size:9.87778px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="39.863434"
y="65.653564"
id="text3134"><tspan
sodipodi:role="line"
id="tspan3132"
style="font-weight:bold;font-size:9.87778px;stroke-width:0.264583"
x="39.863434"
y="65.653564">U</tspan></text>
<text
xml:space="preserve"
style="font-size:9.87778px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="90.663414"
y="65.653564"
id="text10412"><tspan
sodipodi:role="line"
id="tspan10410"
style="font-weight:bold;font-size:9.87778px;stroke-width:0.264583"
x="90.663414"
y="65.653564">V</tspan></text>
<text
xml:space="preserve"
style="font-size:9.87778px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="140.40512"
y="65.653564"
id="text13577"><tspan
sodipodi:role="line"
id="tspan13575"
style="font-weight:bold;font-size:9.87778px;stroke-width:0.264583"
x="140.40512"
y="65.653564">W</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart);marker-end:url(#Arrow1Lend)"
d="M 44.744406,26.401431 H 79.454769"
id="path14977"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart);marker-end:url(#Arrow1Lend)"
d="M 95.544393,26.401431 H 130.25478"
id="path15367"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="33.897701"
y="87.65461"
id="text17224"><tspan
sodipodi:role="line"
id="tspan17222"
style="stroke-width:0.264583"
x="33.897701"
y="87.65461">v<tspan
style="font-size:65%;baseline-shift:sub"
id="tspan18436">1</tspan></tspan></text>
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="84.878738"
y="87.65461"
id="text20216"><tspan
sodipodi:role="line"
id="tspan20214"
style="stroke-width:0.264583"
x="84.878738"
y="87.65461">v<tspan
style="font-size:65%;baseline-shift:sub"
id="tspan20212">2</tspan></tspan></text>
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="135.80867"
y="87.628632"
id="text21403"><tspan
sodipodi:role="line"
id="tspan21401"
style="stroke-width:0.264583"
x="135.80867"
y="87.628632">v<tspan
style="font-size:65%;baseline-shift:sub"
id="tspan21399">3</tspan></tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
d="M 36.649783,82.623383 V 69.923144"
id="path25745"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
d="M 87.616479,82.623383 V 69.923144"
id="path26211"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
d="M 138.58315,82.623383 V 69.923144"
id="path26213"
sodipodi:nodetypes="cc" />
<g
id="g26231"
transform="translate(47.105404,0.32337155)">
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="rect26215"
width="14.444621"
height="14.444621"
x="27.49683"
y="107.80682" />
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="rect26217"
width="14.444621"
height="14.444621"
x="41.941452"
y="107.80682" />
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="rect26223"
width="14.444621"
height="14.444621"
x="56.386074"
y="107.80682" />
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="rect26225"
width="14.444621"
height="14.444621"
x="70.830696"
y="107.80682" />
</g>
<g
id="g26241"
transform="translate(-16.394599,0.32337155)">
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="rect26233"
width="14.444621"
height="14.444621"
x="27.49683"
y="107.80682" />
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="rect26235"
width="14.444621"
height="14.444621"
x="41.941452"
y="107.80682" />
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="rect26237"
width="14.444621"
height="14.444621"
x="56.386074"
y="107.80682" />
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="rect26239"
width="14.444621"
height="14.444621"
x="70.830696"
y="107.80682" />
</g>
<g
id="g26251"
transform="translate(110.60541,0.32337155)">
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="rect26243"
width="14.444621"
height="14.444621"
x="27.49683"
y="107.80682" />
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="rect26245"
width="14.444621"
height="14.444621"
x="41.941452"
y="107.80682" />
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="rect26247"
width="14.444621"
height="14.444621"
x="56.386074"
y="107.80682" />
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="rect26249"
width="14.444621"
height="14.444621"
x="70.830696"
y="107.80682" />
</g>
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="29.80761"
y="116.27283"
id="text26257"><tspan
sodipodi:role="line"
id="tspan26255"
style="stroke-width:0.264583"
x="29.80761"
y="116.27283">v<tspan
style="font-size:65%;baseline-shift:sub"
id="tspan26253">1</tspan></tspan></text>
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="171.62428"
y="116.27283"
id="text26263"><tspan
sodipodi:role="line"
id="tspan26261"
style="stroke-width:0.264583"
x="171.62428"
y="116.27283">v<tspan
style="font-size:65%;baseline-shift:sub"
id="tspan26259">1</tspan></tspan></text>
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="43.984081"
y="116.27283"
id="text26269"><tspan
sodipodi:role="line"
id="tspan26267"
style="stroke-width:0.264583"
x="43.984081"
y="116.27283">v<tspan
style="font-size:65%;baseline-shift:sub"
id="tspan26265">2</tspan></tspan></text>
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="93.725739"
y="116.27283"
id="text26275"><tspan
sodipodi:role="line"
id="tspan26273"
style="stroke-width:0.264583"
x="93.725739"
y="116.27283">v<tspan
style="font-size:65%;baseline-shift:sub"
id="tspan26271">2</tspan></tspan></text>
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="107.85059"
y="116.24685"
id="text26281"><tspan
sodipodi:role="line"
id="tspan26279"
style="stroke-width:0.264583"
x="107.85059"
y="116.24685">v<tspan
style="font-size:65%;baseline-shift:sub"
id="tspan26277">3</tspan></tspan></text>
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="157.06316"
y="116.24685"
id="text26287"><tspan
sodipodi:role="line"
id="tspan26285"
style="stroke-width:0.264583"
x="157.06316"
y="116.24685">v<tspan
style="font-size:65%;baseline-shift:sub"
id="tspan26283">3</tspan></tspan></text>
<text
xml:space="preserve"
style="font-size:9.87778px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="58.253956"
y="118.04864"
id="text26291"><tspan
sodipodi:role="line"
id="tspan26289"
style="font-weight:bold;font-size:9.87778px;stroke-width:0.264583"
x="58.253956"
y="118.04864">a</tspan></text>
<text
xml:space="preserve"
style="font-size:9.87778px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="121.75394"
y="119.03497"
id="text27269"><tspan
sodipodi:role="line"
id="tspan27267"
style="font-weight:bold;font-size:9.87778px;stroke-width:0.264583"
x="121.75394"
y="119.03497">b</tspan></text>
<text
xml:space="preserve"
style="font-size:9.87778px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="185.25398"
y="118.04864"
id="text27273"><tspan
sodipodi:role="line"
id="tspan27271"
style="font-weight:bold;font-size:9.87778px;stroke-width:0.264583"
x="185.25398"
y="118.04864">c</tspan></text>
<circle
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="circle30677"
cx="39.991474"
cy="155.30093"
r="7.3810315" />
<circle
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="circle30679"
cx="103.49148"
cy="155.30093"
r="7.3810315" />
<circle
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="circle30681"
cx="166.99149"
cy="155.30093"
r="7.3810315" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart);marker-end:url(#Arrow1Lend)"
d="M 48.448574,155.68343 H 95.32977"
id="path30683"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart);marker-end:url(#Arrow1Lend)"
d="m 111.4194,155.68343 h 47.41039"
id="path30685"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
d="m 17.895587,115.38194 18.533066,32.66014"
id="path30900"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
d="m 81.395591,115.38194 18.533066,32.66014"
id="path31020"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
d="m 144.89562,115.38194 18.53307,32.66014"
id="path31022"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
d="M 39.831452,156.04018 53.904315,123.31813"
id="path31024"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
d="m 103.33146,156.04018 14.07287,-32.72205"
id="path31125"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
d="m 166.8315,156.04018 14.07287,-32.72205"
id="path31127"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:11.2889px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="-96.779518"
y="29.563251"
id="text32847"><tspan
sodipodi:role="line"
id="tspan32845"
style="font-weight:bold;font-size:11.2889px;stroke-width:0.264583"
x="-96.779518"
y="29.563251">LinkedList[Vertex]</tspan></text>
<text
xml:space="preserve"
style="font-size:11.2889px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="-96.779518"
y="118.42278"
id="text40149"><tspan
sodipodi:role="line"
id="tspan40147"
style="font-weight:bold;font-size:11.2889px;stroke-width:0.264583"
x="-96.779518"
y="118.42278">Edge</tspan></text>
<text
xml:space="preserve"
style="font-size:11.2889px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="-95.798325"
y="66.147354"
id="text41287"><tspan
sodipodi:role="line"
id="tspan41285"
style="font-weight:bold;font-size:11.2889px;stroke-width:0.264583"
x="-95.798325"
y="66.147354">Vertex</tspan></text>
<text
xml:space="preserve"
style="font-size:11.2889px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="-96.779518"
y="158.3712"
id="text41291"><tspan
sodipodi:role="line"
id="tspan41289"
style="font-weight:bold;font-size:11.2889px;stroke-width:0.264583"
x="-96.779518"
y="158.3712">LinkedList[Edge]</tspan></text>
<circle
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="circle44803"
cx="219.78366"
cy="26.693445"
r="7.3810315" />
<circle
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="circle44805"
cx="184.21912"
cy="78.383881"
r="7.3810315" />
<circle
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-dashoffset:26.1543"
id="circle44807"
cx="255.34821"
cy="78.383881"
r="7.3810315" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
d="M 214.4904,31.956183 188.21003,71.679089"
id="path44848" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
d="m 192.1728,78.535091 h 55.66198"
id="path44850" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
d="M 252.89361,70.725637 225.30575,32.971619"
id="path44852" />
<text
xml:space="preserve"
style="font-size:9.87778px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="215.77322"
y="30.223978"
id="text50442"><tspan
sodipodi:role="line"
id="tspan50440"
style="font-weight:bold;font-size:9.87778px;stroke-width:0.264583"
x="215.77322"
y="30.223978">U</tspan></text>
<text
xml:space="preserve"
style="font-size:9.87778px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="180.39679"
y="81.98436"
id="text50530"><tspan
sodipodi:role="line"
id="tspan50528"
style="font-weight:bold;font-size:9.87778px;stroke-width:0.264583"
x="180.39679"
y="81.98436">V</tspan></text>
<text
xml:space="preserve"
style="font-size:9.87778px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="249.90771"
y="81.98436"
id="text50534"><tspan
sodipodi:role="line"
id="tspan50532"
style="font-weight:bold;font-size:9.87778px;stroke-width:0.264583"
x="249.90771"
y="81.98436">W</tspan></text>
<text
xml:space="preserve"
style="font-size:9.87778px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="192.75375"
y="51.423004"
id="text50538"><tspan
sodipodi:role="line"
id="tspan50536"
style="font-weight:bold;font-size:9.87778px;stroke-width:0.264583"
x="192.75375"
y="51.423004">a</tspan></text>
<text
xml:space="preserve"
style="font-size:9.87778px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="215.9006"
y="87.990524"
id="text50542"><tspan
sodipodi:role="line"
id="tspan50540"
style="font-weight:bold;font-size:9.87778px;stroke-width:0.264583"
x="215.9006"
y="87.990524">b</tspan></text>
<text
xml:space="preserve"
style="font-size:9.87778px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="241.33392"
y="52.039276"
id="text50546"><tspan
sodipodi:role="line"
id="tspan50544"
style="font-weight:bold;font-size:9.87778px;stroke-width:0.264583"
x="241.33392"
y="52.039276">c</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 470 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 483 KiB

View File

@ -0,0 +1,645 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="167.35748mm"
height="109.2616mm"
viewBox="0 0 167.35748 109.26159"
version="1.1"
id="svg126285"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
sodipodi:docname="dfs-one-example.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview126287"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.94366641"
inkscape:cx="424.9383"
inkscape:cy="239.49141"
inkscape:window-width="1920"
inkscape:window-height="1011"
inkscape:window-x="1080"
inkscape:window-y="352"
inkscape:window-maximized="1"
inkscape:current-layer="g239536" />
<defs
id="defs126282" />
<g
inkscape:label="Backdrop"
inkscape:groupmode="layer"
id="layer1"
transform="translate(149.80885,-56.696304)"
style="display:inline">
<circle
style="fill:#ecd882;fill-opacity:1;stroke:#52548a;stroke-width:0.733028;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle126039"
cx="-56.820004"
cy="66.64975"
r="6.1788368" />
<circle
style="fill:#ecd882;fill-opacity:1;stroke:#52548a;stroke-width:0.733028;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle153825"
cx="-81.600899"
cy="91.683823"
r="6.1788368" />
<circle
style="fill:#ecd882;fill-opacity:1;stroke:#52548a;stroke-width:0.733028;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle153827"
cx="-31.85923"
cy="91.683823"
r="6.1788368" />
<circle
style="fill:#ecd882;fill-opacity:1;stroke:#52548a;stroke-width:0.733028;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle153829"
cx="11.003275"
cy="91.683823"
r="6.1788368" />
<circle
style="fill:#ecd882;fill-opacity:1;stroke:#52548a;stroke-width:0.733028;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle153831"
cx="-56.820004"
cy="116.66315"
r="6.1788368" />
<path
style="fill:none;stroke:#52548a;stroke-width:0.365;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M -77.717179,86.986997 -61.188812,71.281301"
id="path153866" />
<path
style="fill:none;stroke:#52548a;stroke-width:0.365;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -77.717179,96.152135 16.528367,15.705685"
id="path154043" />
<path
style="fill:none;stroke:#52548a;stroke-width:0.365;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M -56.955479,72.868801 V 110.27031"
id="path154182"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#52548a;stroke-width:0.365;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M -52.776427,71.21138 -36.24806,86.917059"
id="path154620" />
<path
style="fill:none;stroke:#52548a;stroke-width:0.365;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M -52.636591,111.99767 -36.108224,96.291971"
id="path154622" />
<path
style="fill:none;stroke:#52548a;stroke-width:0.365;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M -50.410263,116.65052 6.7241018,96.252235"
id="path154624"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#52548a;stroke-width:0.365;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M -50.410263,66.618901 6.7241018,87.017177"
id="path155029"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="-49.722603"
y="64.6726"
id="text158083"><tspan
sodipodi:role="line"
id="tspan158081"
style="font-weight:bold;stroke-width:0.264583"
x="-49.722603"
y="64.6726">A</tspan></text>
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="-86.436089"
y="84.295204"
id="text159761"><tspan
sodipodi:role="line"
id="tspan159759"
style="font-weight:bold;stroke-width:0.264583"
x="-86.436089"
y="84.295204">B</tspan></text>
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="-68.096634"
y="121.58597"
id="text161296"><tspan
sodipodi:role="line"
id="tspan161294"
style="font-weight:bold;stroke-width:0.264583"
x="-68.096634"
y="121.58597">C</tspan></text>
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="-24.760799"
y="92.79306"
id="text161892"><tspan
sodipodi:role="line"
id="tspan161890"
style="font-weight:bold;stroke-width:0.264583"
x="-24.760799"
y="92.79306">D</tspan></text>
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="9.1489"
y="84.001724"
id="text162784"><tspan
sodipodi:role="line"
id="tspan162782"
style="font-weight:bold;stroke-width:0.264583"
x="9.1489"
y="84.001724">E</tspan></text>
<g
id="g184408"
transform="translate(3.3114201,18.748475)">
<circle
style="fill:#ecd882;fill-opacity:1;stroke:#52548a;stroke-width:0.733028;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle167968"
cx="-146.57492"
cy="44.493179"
r="6.1788368" />
<g
id="g167979"
transform="translate(-89.754914,-8.0719849)">
<circle
style="fill:#ecd882;fill-opacity:1;stroke:#52548a;stroke-width:0.733028;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle167970"
cx="-56.820004"
cy="66.64975"
r="6.1788368" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;line-height:1.25;font-family:'Noto Color Emoji';-inkscape-font-specification:'Noto Color Emoji';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#26a269;stroke-width:0.264583"
x="-60.631718"
y="69.725365"
id="text167974"><tspan
sodipodi:role="line"
id="tspan167972"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;font-family:'Noto Color Emoji';-inkscape-font-specification:'Noto Color Emoji';fill:#26a269;stroke-width:0.264583"
x="-60.631718"
y="69.725365">☑</tspan></text>
</g>
<path
style="fill:none;stroke:#a51d2d;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 1.5;stroke-dashoffset:0;stroke-opacity:1"
d="M -146.57492,103.91777 V 93.719796"
id="path167981"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#26a269;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M -146.57492,90.688674 V 80.490669"
id="path168078"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#52548a;stroke-width:0.365;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M -146.57492,67.261503 V 77.459521"
id="path168335"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="-136.56303"
y="46.050362"
id="text170352"><tspan
sodipodi:role="line"
id="tspan170350"
style="font-weight:bold;stroke-width:0.264583"
x="-136.56303"
y="46.050362">Unexplored</tspan></text>
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="-136.56303"
y="60.682026"
id="text172656"><tspan
sodipodi:role="line"
id="tspan172654"
style="font-weight:bold;stroke-width:0.264583"
x="-136.56303"
y="60.682026">Visited</tspan></text>
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="-136.56303"
y="73.917694"
id="text173424"><tspan
sodipodi:role="line"
id="tspan173422"
style="font-weight:bold;stroke-width:0.264583"
x="-136.56303"
y="73.917694">Unexplored</tspan></text>
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="-136.56303"
y="87.124802"
id="text173764"><tspan
sodipodi:role="line"
id="tspan173762"
style="font-weight:bold;stroke-width:0.264583"
x="-136.56303"
y="87.124802">Spanning</tspan></text>
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="-136.56303"
y="100.92304"
id="text174138"><tspan
sodipodi:role="line"
id="tspan174136"
style="font-weight:bold;stroke-width:0.264583"
x="-136.56303"
y="100.92304">Back</tspan></text>
</g>
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-decoration:underline;text-decoration-line:underline;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="-99.084877"
y="129.5529"
id="text186186"><tspan
sodipodi:role="line"
id="tspan186184"
style="font-weight:bold;stroke-width:0.264583"
x="-99.084877"
y="129.5529">Call Stack</tspan></text>
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Animation"
style="display:inline"
transform="translate(1.374123e-6,-9.2643834)">
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="52.286896"
y="89.785408"
id="text191333"
class="fragment"><tspan
sodipodi:role="line"
id="tspan191331"
style="stroke-width:0.264583"
x="52.286896"
y="89.785408">DFS(G)</tspan></text>
<g
id="g239536"
class="fragment">
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="52.286896"
y="96.135406"
id="text191417"><tspan
sodipodi:role="line"
id="tspan191415"
style="stroke-width:0.264583"
x="52.286896"
y="96.135406">DFSOne(G, A)</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;line-height:1.25;font-family:'Noto Color Emoji';-inkscape-font-specification:'Noto Color Emoji';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#26a269;stroke-width:0.264583"
x="-60.631718"
y="69.725365"
id="text137893-9"
transform="translate(149.80885,-47.43192)"
class="fragment"><tspan
sodipodi:role="line"
id="tspan137891-5"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;font-family:'Noto Color Emoji';-inkscape-font-specification:'Noto Color Emoji';fill:#26a269;stroke-width:0.264583"
x="-60.631718"
y="69.725365">☑</tspan></text>
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="92.863266"
y="96.130882"
id="text211585"
class="fragment"><tspan
sodipodi:role="line"
id="tspan211583"
style="fill:#77767b;stroke-width:0.264583"
x="92.863266"
y="96.130882">(→ B, C, D)</tspan></text>
</g>
<path
style="display:inline;fill:none;stroke:#26a269;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M -81.028599,68.238522 -64.500232,52.532826"
id="path168078-0"
class="fragment"
sodipodi:nodetypes="cc"
transform="translate(153.12027,-28.683445)" />
<g
id="g239546"
class="fragment">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;line-height:1.25;font-family:'Noto Color Emoji';-inkscape-font-specification:'Noto Color Emoji';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#26a269;stroke-width:0.264583"
x="64.306305"
y="47.164284"
id="text195411"><tspan
sodipodi:role="line"
id="tspan195409"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;font-family:'Noto Color Emoji';-inkscape-font-specification:'Noto Color Emoji';fill:#26a269;stroke-width:0.264583"
x="64.306305"
y="47.164284">☑</tspan></text>
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="52.286896"
y="102.4854"
id="text195415"><tspan
sodipodi:role="line"
id="tspan195413"
style="stroke-width:0.264583"
x="52.286896"
y="102.4854">DFSOne(G, B)</tspan></text>
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="92.876953"
y="102.46486"
id="text218207"><tspan
sodipodi:role="line"
id="tspan218205"
style="fill:#77767b;stroke-width:0.264583"
x="92.876953"
y="102.46486">(→ A, C)</tspan></text>
</g>
<path
style="display:inline;fill:none;stroke:#26a269;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -81.028599,77.40366 16.528367,15.705685"
id="path229112"
class="fragment"
sodipodi:nodetypes="cc"
transform="translate(153.12027,-28.683445)" />
<g
id="g239554"
class="fragment">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;line-height:1.25;font-family:'Noto Color Emoji';-inkscape-font-specification:'Noto Color Emoji';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#26a269;stroke-width:0.264583"
x="89.177132"
y="72.312668"
id="text229110"><tspan
sodipodi:role="line"
id="tspan229108"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;font-family:'Noto Color Emoji';-inkscape-font-specification:'Noto Color Emoji';fill:#26a269;stroke-width:0.264583"
x="89.177132"
y="72.312668">☑</tspan></text>
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="52.286896"
y="108.83542"
id="text229493"><tspan
sodipodi:role="line"
id="tspan229491"
style="stroke-width:0.264583"
x="52.286896"
y="108.83542">DFSOne(G, C)</tspan></text>
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="92.876953"
y="108.81487"
id="text230975"><tspan
sodipodi:role="line"
id="tspan230973"
style="fill:#77767b;stroke-width:0.264583"
x="92.876953"
y="108.81487">(→ B, A, D, E)</tspan></text>
</g>
<path
style="display:inline;fill:none;stroke:#a51d2d;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 1.5;stroke-dashoffset:0;stroke-opacity:1"
d="M 92.853371,62.83839 V 25.436881"
id="path167981-4"
sodipodi:nodetypes="cc"
class="fragment" />
<path
style="display:inline;fill:none;stroke:#26a269;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M -39.419644,77.543496 -55.948011,93.249195"
id="path231575"
class="fragment"
sodipodi:nodetypes="cc"
transform="translate(153.12027,-28.683445)" />
<g
id="g239562"
class="fragment">
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="52.286896"
y="115.18542"
id="text231868"><tspan
sodipodi:role="line"
id="tspan231866"
style="stroke-width:0.264583"
x="52.286896"
y="115.18542">DFSOne(G, D)</tspan></text>
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="92.876953"
y="115.16486"
id="text231872"><tspan
sodipodi:role="line"
id="tspan231870"
style="fill:#77767b;stroke-width:0.264583"
x="92.876953"
y="115.16486">(→ C, D)</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;line-height:1.25;font-family:'Noto Color Emoji';-inkscape-font-specification:'Noto Color Emoji';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#26a269;stroke-width:0.264583"
x="114.41547"
y="47.164284"
id="text234421"><tspan
sodipodi:role="line"
id="tspan234419"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;font-family:'Noto Color Emoji';-inkscape-font-specification:'Noto Color Emoji';fill:#26a269;stroke-width:0.264583"
x="114.41547"
y="47.164284">☑</tspan></text>
</g>
<path
style="display:inline;fill:none;stroke:#a51d2d;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 1.5;stroke-dashoffset:0;stroke-opacity:1"
d="M 113.56079,39.485139 97.032423,23.77946"
id="path234204"
sodipodi:nodetypes="cc"
class="fragment" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.365001;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="rect239586"
width="69.220787"
height="8.3245096"
x="49.503799"
y="110.01897"
class="fragment" />
<path
style="display:inline;fill:none;stroke:#26a269;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 3.4126818,77.50376 -53.721683,97.902045"
id="path234503"
class="fragment"
sodipodi:nodetypes="cc"
transform="translate(153.12027,-28.683445)" />
<g
id="g239727"
class="fragment">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;line-height:1.25;font-family:'Noto Color Emoji';-inkscape-font-specification:'Noto Color Emoji';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#26a269;stroke-width:0.264583"
x="157.31093"
y="47.164284"
id="text234682"><tspan
sodipodi:role="line"
id="tspan234680"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;font-family:'Noto Color Emoji';-inkscape-font-specification:'Noto Color Emoji';fill:#26a269;stroke-width:0.264583"
x="157.31093"
y="47.164284">☑</tspan></text>
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="52.286896"
y="115.18543"
id="text234901"><tspan
sodipodi:role="line"
id="tspan234899"
style="stroke-width:0.264583"
x="52.286896"
y="115.18543">DFSOne(G, E)</tspan></text>
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="92.876953"
y="115.16489"
id="text234905"><tspan
sodipodi:role="line"
id="tspan234903"
style="fill:#77767b;stroke-width:0.264583"
x="92.876953"
y="115.16489">(→ A, C)</tspan></text>
</g>
<path
style="display:inline;fill:none;stroke:#a51d2d;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 1.5;stroke-dashoffset:0;stroke-opacity:1"
d="M 156.53295,39.585257 99.398587,19.186981"
id="path234684"
sodipodi:nodetypes="cc"
class="fragment" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.365001;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="rect239950"
width="81.809563"
height="14.339792"
x="49.503799"
y="104.00368"
class="fragment" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.24289;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="rect240032"
width="81.809563"
height="6.3500071"
x="49.503799"
y="97.653671"
class="fragment" />
<g
id="g248537"
class="fragment">
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.24289;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="rect240034"
width="81.809563"
height="6.3500071"
x="49.503799"
y="91.303673" />
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="52.286896"
y="96.135406"
id="text245034"><tspan
sodipodi:role="line"
id="tspan245032"
style="stroke-width:0.264583"
x="52.286896"
y="96.135406">DFSOne(G,B)</tspan></text>
</g>
<g
id="g248545"
class="fragment">
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.24289;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="rect248539"
width="81.809563"
height="6.3500071"
x="49.503799"
y="91.303673" />
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="52.286896"
y="96.135406"
id="text248543"><tspan
sodipodi:role="line"
id="tspan248541"
style="stroke-width:0.264583"
x="52.286896"
y="96.135406">DFSOne(G,C)</tspan></text>
</g>
<g
id="g249023"
class="fragment">
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.24289;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="rect249017"
width="81.809563"
height="6.3500071"
x="49.503799"
y="91.303673" />
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="52.286896"
y="96.135406"
id="text249021"><tspan
sodipodi:role="line"
id="tspan249019"
style="stroke-width:0.264583"
x="52.286896"
y="96.135406">DFSOne(G,D)</tspan></text>
</g>
<g
id="g249695"
class="fragment">
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.24289;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="rect249689"
width="81.809563"
height="6.3500071"
x="49.503799"
y="91.303673" />
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="52.286896"
y="96.135406"
id="text249693"><tspan
sodipodi:role="line"
id="tspan249691"
style="stroke-width:0.264583"
x="52.286896"
y="96.135406">DFSOne(G,E)</tspan></text>
</g>
<rect
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.345182;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="rect249689-8"
width="81.707268"
height="12.840878"
x="49.554947"
y="84.76165"
class="fragment" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 29 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -0,0 +1,511 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="75.935417mm"
height="111.50732mm"
viewBox="0 0 75.935417 111.50732"
version="1.1"
id="svg80555"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
sodipodi:docname="dis-connected-graph.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview80557"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="1.1825515"
inkscape:cx="76.106622"
inkscape:cy="346.70795"
inkscape:window-width="1920"
inkscape:window-height="1011"
inkscape:window-x="1080"
inkscape:window-y="352"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs80552" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-108.73833,-36.468289)">
<image
width="75.935417"
height="45.243752"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,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
0uEAAAAASUVORK5CYII=
"
id="image100082"
x="108.73833"
y="102.73186" />
<image
width="75.935417"
height="45.243752"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,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
"
id="image94742"
x="108.73833"
y="44.896046" />
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="148.04671"
y="40.756741"
id="text82952"><tspan
sodipodi:role="line"
id="tspan82950"
style="font-weight:bold;text-align:center;text-decoration:underline;text-decoration-line:underline;text-anchor:middle;stroke-width:0.264583"
x="148.04671"
y="40.756741">Connected Graph</tspan></text>
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="148.04671"
y="98.435921"
id="text88836"><tspan
sodipodi:role="line"
id="tspan88834"
style="font-weight:bold;text-align:center;text-decoration:underline;text-decoration-line:underline;text-anchor:middle;stroke-width:0.264583"
x="148.04671"
y="98.435921">Disconnected Graph</tspan></text>
<g
id="g103325"
class="fragment">
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="145.17395"
y="139.31238"
id="text101906"><tspan
sodipodi:role="line"
id="tspan101904"
style="stroke-width:0.264583"
x="145.17395"
y="139.31238">(2 connected</tspan><tspan
sodipodi:role="line"
style="stroke-width:0.264583"
x="145.17395"
y="146.36794"
id="tspan101908">components)</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 160.21914,126.75784 1.59283,6.97597"
id="path102947"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 133.20057,132.95988 10.58241,3.68291"
id="path102949"
sodipodi:nodetypes="cc" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 34 KiB

View File

@ -0,0 +1,420 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="58.921089mm"
height="60.130611mm"
viewBox="0 0 58.921089 60.130611"
version="1.1"
id="svg107708"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
sodipodi:docname="maze-is-graph.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview107710"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="1.9355068"
inkscape:cx="137.94837"
inkscape:cy="117.28194"
inkscape:window-width="1920"
inkscape:window-height="1011"
inkscape:window-x="1080"
inkscape:window-y="352"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs107705" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-15.452877,-10.493591)">
<image
width="58.921089"
height="60.130611"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVUAAAFcCAYAAAB4Ay3mAAAACXBIWXMAABaZAAAWmQFsKhZKAAAi
/klEQVR4nO3dCZwcZZnH8acnmSQk5IAQSIIICCoKstwoiEZAVgQXPDgUORZB7kOOBRQEURHwgkVU
QA5xEUTkUARBVERAQa4FFBeQI4GEm4GEQEhmep8nb7WpVKq6eyZvvdXV9ft+Ps9nOl3F1DvMzH/q
eI/hUj0bax2ttaHWHK0RWjdrna71eHHNCmptrVW0flN0Q3I2XOtDWu/TGqP1tLiv+eEiG5Uz+zoP
1tpF653Re//QuljrbK0FBbWrCKO0TtO6ResXoQ46PNSBOsQBWmdpXS0uVPu0VtK6XOtecT+INxTU
thDepXWc1me0zpDuDtX3a/1IFgVLw4DW/2gdJO6PajexP5Q3aq2l9ZzWfK3xWhtE9VGt7aQ6wXqq
1qFa84RQzcU0cYH6hNZu4v5Hm2e1Pqn1qNYVWu/V+lv45uVqda1jtT6nNazgtoSwtdavtN7UukPc
9/o9Wstp9WjtobWq1ofFBU83WEbcycKftbbRmhG9v6nW+eKuTuz9vcT9sel29r09tIgDVyVUe7V+
LC5QviWLArXhBa1zxd0WOEfcWU63eIvWf4i7vWFn4cH+YhfEgvNScZe79v18NXrfftb30/q21kit
D0b//l4BbcyD/cG07+8XE+/bH5UdtR4Qdzm8vXR/qE4U9zW+prVs6INXJVQ/ofVWrbrWVRn7XCnu
l3BzcWc6N4VpWu6e0jozev1GkQ0JZE9xQWK3egZi79slr91TtLPXc2P7dkOo1rQ20frPjO12FWa3
txr3lrvd98Wdne+utWbog1clVPeNPj4m7nI/zT3ifuHswZXdHuiWUI0baL1L6dlZuZ2BZn2tF2id
pDVV692B2pQ3O1mwr7m/yT7PRx/vy701xdpb621anxUXqsFVIVTtUm+z6PXfm+xngWpPhdcRdzMf
5WO3eeyP4SNN9rHguUtc+L4eolGBNPta7LbXRuJuc53ZZL+ys2cHXxd3a6ewe+VVCFX7YVomev1S
i31fjD5O0lpZXBcclIf9Ip3Sxn6Nh3WP5tiWTvJ5cb/rdj/1qYLbkhd7AHmR1olScJe5KoTq22Kv
X2mxb1/stXU/IlS7U+M+W7c/tDP7iHs4Z5fCdxTcljwdrzVX67yiG1KFUJ0Ue90qVOPbJ/hvCjrA
alpvF9dH9eJim5IrG/TwBa2PRf+27oLWK8KeL7xWVKNyYn3O94s+1gtuSyVCdVzs9auZeznxUB2X
uRfKbC9xl4onSPZDy7KzgQ07ijsxsFsivdH7nxbX3egj0gHh44n1Zvip1mFazxTcloWqEKqzY69H
tth3VOx1t422gcgKWoeIG7Z4VsFtydPZURn7mk8SF7TGBgDYg9hrwzcrF98V9/28ouiGNFQhVOMP
p8a32HdC7PXzWTuhtGwARJ/Wp6R596NuYk/8bS4AOys/OXrPRhB2Q6juoLWV1noFt2MxVQjVf8Ze
t7qkj2+fmUNbUJydxJ2hbSHV/INpvSJseK49pEvOh1BGK2r9QGtXWfxqtHBVCNW7xY2msa91Qot9
l4s+vizN+zqiXNYXN4GMTSjSzTNUNWNn5tdoHSnunnLZWSd/u/L8TpN9Vok+2h+TLaPXN2sdlV+z
qhGq9qTzfnGz9KzaYt/G9lulGqOPqsC61F0m7pL/7oLbUrQno4/TC22FH9bXeLS4J/6trBSVmdFs
Rx+qEKrGupJYqNpMRfYkNG20hXX2b/yPvyxQu5AvG4r6S639xc3elMV+Qatwj3VC9PG3RTbCE3sQ
d2mLfa7Xeoe4vqunRu/l3p2sKqF6idZXxXW/sCFsaeP6Pxp9tA7/Pw/ULuTHnnrbw5hjtP7QZD+7
x2r9Vi8I0aiC2XR4s6R1GJVBnyw+WCfNm7F9H8uxLYupSqjaD5LdqLennwfKkqFq95gOiF7b/ZZu
mWMzaUTRDQjEHjj+WtyDjNtl0b3yODs7tZmdrGvVesFalh+bcWt5cRNwpz2Is5MGmyvY5jygu2CO
qhKqxpZVsKnPdhQ3ZO8nsW02xM0eZvy3dPel/1qx1xMLa0W+bJ4HeyCzSVTnNt994faOeno8BBPE
jXs3XxE3Z7A9wLHwtD8ettKDDXawLkjdvNpDR6hSqNqlwI7i5ky1DsM2usRmrbJfPLv8szPVHxbV
uBzZXJu2Lpd1pTkh9v7OWn8VN2OTPbjoiNEoS8nul9utm2mD+G9ahW4Z9In7mbb+qGPFBaudKFh3
QusaaKsg2MRCrUYUwoMqhaqxYLWpwawT+LriLgvtjPVB6d4HFRaqdjlsaxYdkrLdto1Keb+M7Of5
jKjaYV3tuqVHwBHinhvYRED2VNyGXFu3wL4C21Q0m+fAZv5/stWOPlUtVBvsnmm3/DK1Yl3DunHC
7TQ2p2hVvtY01r/69qIb0UH+UsRBqxqqAJALQhUAPCJUAcAjQhUAPCJUAcAjQhUAPCJUAcAjQhUA
PCJUAcCjKoeqrW1jsxjZJBMPFdyWkGysu81m9KmiGxKQLb1hE4/bePjLC25LSIdE9Y6iGxLYn8TN
8H9Ci/1yUeVQtTHBNpFKt4x7b5dNxr1i0Y0IzCZase91q4Ufu43NRPb2ohtRgDWkwBOlKocqAHhH
qAKAR0WFqs20f11Bx25oXALbWjdVmmfS1uoaKdWarLhxi+cwcWveV8Wa0ccqfa+NPTPYVgr6uosM
1X8v6NhJ7yu6AQXplP//Ia0dVdVU8Xv9lqiC4/IfADzqhFC1SZQ/VsBxbRE063JxqLhlJ4IYPfqA
jXp7V13tlVeOvSLUMRNOErem0eEhDzp+/EXHz5nztTP6+x8tYtE5ewp+sbhF/oJdEg4btvb4sWOP
PLCvb+9vhDpmwm7i1qfaLuRBx407fZcFC/75yNy559wT8rgxtprHneK+36H8uvGiE0K1LsXcX+2N
Plr/xXtDHXTcuO/Xe3pknoZqUfeUDxK3xErQ448evee+48fv+dvp02svhzxuZOXo4wMS8OueNOnB
SbWafEJDtajv9SbRx6DHHzPm6PX0675LQ/XGkMeNmac1Qwp6btMJoQoAXYNQBQCPqhyq94u7nzqj
6IYEZstwL1N0IwLrE/e9rtqieHb5+2LRjSjAl7SeKOrgVQ7VxyXsjexO8auiG1CA16Sa3+s7o6qa
C4s8eBVCdXWtLcT1T7TO0CuJO1OzmitufXQ7W31U6z5xD676CmgngC7QraFqs/LsIa47yeqD/G/7
xa0X/lOtS8WtpQ4Abem2UF1X68taHxc3amsohmltHtVp4u5Bnq71vI8GAuhu3RKqY7ROFvcwwufX
ZNMDHqW1d/TxInH9agEgVTeEqs0XeaXWOjkewyZouEBrR63dpVoTsAAYhLKH6mbiuo20mnz4Ga3f
i3sQ9bC4p8H2kGq01lStd4qbWMWq2aTV/6H1R61thNsBAFKUOVQtUG0c99iM7XaZ/ktxXWn+IG6O
gVbGae2idYTWWhn7rKf1O60PSTX7AAJooqyhak/0r5bsQLUx3vvI4Pvo2WX9eeIu9e2/twdU41L2
e4/Wz8WdsS4Y5DEAdLEyhuoIrau0JmVs/5G4SUPeXIpjWLeqc7RuEHe2+56UfexM9etaxyzFcQB0
mTKGqg1B+7eMbadE2315Quv9WjbbzqYp24/U+oVUc9QKgBRlC1VbJfHYjG3ni99AbbBbArY0gwXn
molt1qfVlmOxKdboagWgdKH6FXGX/0n3aR2c43FtVNVOWnekHH8jcV2trsrx+ABKokyhuprWp1Pe
t/ufn9d6I+fj36f1ba3jUrbZ2TOhCqBUoWrBmTb01Mbn/zVQG+zB1L5aKyTet8v/9SXgCgIAOlNa
qC6ntae4NZysU/2T4s7C7GFNUfcNbfmP3TO2hVz/xwYN2D3UE1O2WfsIVaDikqH6EXGzM9k0eDbW
3RbE21rrZ+Ie1Oyq9VLIBkY2lPTlZm/T+nvgtliXrePFPaSKs9FWRwRuC4AOEw9V66ZkY+ht+KWt
E96Y8u7HWi9oXStuxcBp4hbWCilr3fKfBW2F85TWn8V1tYpbI6pgK7MC6DyNULWVRS8XN3GzXU4n
5xC1MLUx7x8Ut6zz8aEaGEnrI2qCLTecYIMCkqFq7N4qoQpUWCNUPyluYmcbcnl5xr6XiQvVw7X+
W+u5vBsXs1HKe3ZG/UjANsTdlvG+3aa4NGRDAHSWRqgeFH20xfCy7pneHH20uUtt0pFQa/7Y8aak
vH9foOOnyTr2O0M2AkDnsVC1CUPeF/37/ib72llhY7o8m1k/VKi+NeP9Ii+z7faIzVA1MfH+KgW0
BUAHsVC1KfQaT7KfbbKvdbK3S+5VxV2OWzendrtY2b3a+H3R+JNz+zzTEvvbg6DGw7CVMj7n020e
Oy92/GSorlxEQwB0DgvV+Iz5rWa07xMXqmOjj0+0eRwLmz9kbOtJ2WZnpzOi16Mz/ruiZ9/vS3lv
TOhGAOgsFqrx0UF9LfZ/Jfbapt57os3j2Fndh2L/tjPVm6LXNnn0Von94w/Blsn4nHkPS21lbsp7
tmqA/ZFoZ0JsAF3IQnX52L/bOVNtaLWESdzrsuhBV+O4DfXEtqT5Ge934hDbWlQAKsqCKd6RfzDD
ULPCzrfXM97Pui0QStqlvp299oduCIDOYaEa70LV6uxzQuz1C95bk+6VjPdXDHT8LMlJVczs4K0A
0FEsVONP0VuFanx7qNVEZ2S8n9XVKpS07lNZbQVQERaqd8f+3SpUl4s+2vj3UCOqrJuXPZRKLh29
dqDjp7GeD8umvF/UCC8AHcJC1Tr8231Le8o+ucm+9sS+sdjeLTm3K86epD8oSw5VtSWk7b7mawHb
0rBxxvsPBW0FgI5joWoPnGzFUBt6mrWgnrG5ARrdm67NuV1Jd8mSoWptnyZuspfQts54P+QfGwAd
qNEt6SfiQtWWYrYHQGmX9o2+pDO1rsi/aYv5k9b+Ke/bHKahQ9X6oW6X8r7dorgjcFsAdJhGqF4n
Lri20Pqs1ncS+1nfyz2i17akSKjuVA3Xi5tBK9k31f4QHC7Z3a7yYHO7pk2YbYMZih6QAKBgjZCy
/qm2BtSt4haxszPR6bH99hZ3H9Emsf5ByAZGbAKT32ttk3jfHqxZ284O2JYvZLx/ScA2AOhQ8TO/
f4ibL/ViceF6qrhhqHbZb1MDnqt1mBS3TpUdPxmq5hitCyV92KhvH9D6cMr7feLuSwOouOTl9N/E
nZHarPabiwuRx8VNuvJo2KYtwULLzp6T/VOtv+iXxZ1h52mkZJ+l26TdIUIdQIdLGz9vXZhukc57
km33cU8Wt/Beki1SaKu9/j7H439b690p79soqjNzPC6AEunESUmauUjrUK11E+9bH1pbBNBuX+Sx
uurBsmh1hKSTpJgVZgF0oLKFqk1WYg+m/iJLtt3G4tsT+O217vF4zCO1vpmx7V5xl/4AsFDZQtXY
sFpbzfXUlG22lpXdtjhc63xZuodqNiTXAvOzGdttmsTdxHX1AoCFyhiq5nRxD8/SAs+Grp4XbfuS
ZK98mmWE1ufEPfzKGrZr952t3y7DUgEspqyhamegdhvAnsjvlLGP3V+1rmF2if5TcbcGbA6BtDNL
Wx7G1ur6qNZnJH1avwa7BbGP1jVDaTiA7lbWUDXWG8AC0KYgPLDJfutHZd7UekzcHK02EYsNHrCF
BdNGSKWxEVMW5pcOob0AKqDMoWrsrNOeytuDK1syu9XUhXZpv9YQj2WDIyzE7x3ifw+gAsoeqg02
IYxd3n9La1dxk574Yv1QrY+qPRib12JfABXXLaFqZol7Gv81cYMB7F7r2KX4fDYRtw00+J7Wi0vd
OgCV0E2h2mBP5O3p/SHi+qxuKW647dul+ddrw0zvE/dw67roI4v4ARiUbgzVBgvJy6MyvVqriesm
ZSux2llsX7Tfk+LOdAdCNxJAd+nmUE2y3gKPCOtIAchRlUIVAHJHqAKAR4QqAHhEqAKAR4QqAHjU
AaHa0zNlSv/NRbcilFpNlp8z57SpY8YctV/RbQlpzpyTVxwYmHOvft2V6bY2e/Yxw3p6xkzUr/mx
otsS0muvfXPc6NFHPz1lSv2LRbcllFmzav963QGhOjCgDZpWdCtCmTy5vu3s2SdfXq/PXb3othRg
TNENKEilvte12tjZyy579NEzZ9ZuLLotAf1r7uYOCFUA6B6EKgB4RKgCgEeEKgB4RKgCgEeEKgB4
RKgCgEeEKgB4RKgCgEeEKgB4RKgCgEeEKgB4RKgCgEeEKgB4RKgCgEeEKgB4RKgCgEeEKgB4RKgC
gEeEKgB41CpUN9P6lNYRAdoCAKWXFaqbah2vtb3WQ0KoAkBbkqG6kdaxWhtIxZbVBQAfkqE6RWsv
rTe0ntZaMXSDAKDMkqH6q9jrmUKoAsCgNHtQVQ/WCgDoEnSpAgCPCFUA8IhQBQCPQoXqSK21Y/8e
FntdE9eFK+4Brfl5NwoAfAsVqqto3Z2xrSdl21u1ZuTaIgDIQahQte5ZO8T+bWeqV0avB7Q+ntj/
+RCNAgDfQoXqXK1fZhy3ntgGAKXFgyoA8IhQBQCPCFUA8IhQBQCPCFUA8KhZqI6JPtZCNAQAukFW
qE7WWi16PVXciKh5IRoEAGWWDFVbPsWGjH5Ga0T03jitm7Su0XpY6FMKAJmSoXqz1m1aZ2XsvyDX
1gBAySVDdU4hrQCALsHTfwDwiFAFAI8IVQDwiFAFAI8IVQDwiFAFAI8IVQDwiFAFAI8IVQDwiFAF
AI8IVQDwiFAFAI8IVQDwiFAFAI8IVQDwiFAFAI86IlTf8pb6ykW3IZT+fpkoUmMxRXSxhT/fE6v0
e/3UU4t+pTsgVHt6NGhOL7oVoeiP25Thw9epDww8/1LRbQmpt3fDUaNG7XC3yMD8otsSTk/vG29c
tcH8+fdWatHMnp6VbH27ffT3evui21KEDgjVgYFZs2q7Fd2KUCZPrm+7YMEDl9frc5cvui0hDRs2
9Zlx43bbYfr02stFtyUU/V5Pmjv3rPv7+x+bXHRbQtIThtn64TT9vb6x6LYE9JnGiw4IVQDoHoQq
AHhEqAKAR4QqAHhEqAKAR4QqAHhEqAKAR4QqOtUKWn/RSuvPO1NrU63XcjiuDUTZJ+X9utbHtG7P
4ZjoIoQqOtULWl/WuiRl23Jap2gd5vmY79U6QmtYyrYzhUBFGwhVdLKfau2otVPKtoO1fq51q6dj
jdQ6X9ID9R9ax3k6DrocoYpOd6DWFlrJoZ49Wj/SWk/rDQ/HOUnr3SnvL9DaU+t1D8dABRCq6HR2
G2A/rWtStr1T3C2CLy7lMdbTOjJj28lady7l50eFEKoog19qXay1R8q2o7V+oXX3ED+3/Q5coNWb
ss0+56lD/LyoKEIVZXGo1jSttybeb4TiRlpDmVbwS1rrp7w/V2u3IX5OVBihirJ4RWtvrd9qJSf5
Xlfrv7S+PsjP+S7JfgBln+//Bvn5AEIVpfI7rR9qHZCy7QStq7X+1ubnsqf8Pxb31D/pJq3vD6F9
AKGK0rF7qFtrvT3xfqNL1OZa/W18nqO0Nk55v0/cGXF96E1ElRGqKBsbRbWX1i2yZJ9SG2V1iNYZ
LT7HO7ROzNhmZ8Ezht48VB2hijKykU1nSHo3KLuveq3Woxn/baN/6zIp267UusxD+1BhzUK1J/o4
EKIhwCDZU/t/11on8f5orfO0tpT0S3g7k90i5X2bT2Bfnw1ENSVDdazWF7R2FXeJZOwJqA0XtLHP
c8I1DWjKVii1kU426Uqyj+k0cZOinJd4fzWtr6V8rnq0f6VWuEU+4qFqo1Ou11o9sY8N3bMfxM9q
bSPcb0LnuEdc5/wTUrZ9S+s3sujn1bphnau1bMq+9qT/+jwaiOpphKpNr3aDuI7Odnn0T3H3nD4s
7qHAKK21xN1zsocB3BJAp7BhpNuK6/wfN05c96vton/bpf2HU/57+1k/NrfWoXIaoWpjp58Rd9kU
n5zCQtRu6v9e3A+p/eDuoHVVuCYCTTUmPLEhpaMS2z4qbj32m7VOy/hvbdQUt7XgjYWqPZD6hCwZ
qA32w2qXV2dG/7a/9oQqOsnftb6i9Y2UbfZze7/WhJRttv8d+TULVWShapfzduk/vcl+l8uiUE2b
iR0oms3Yb2emySf7toLAlin72/3Yr+bdKFSPhepD0nrqNLs1sCDa/+m8GwUMgd3n30vrfyX9YVSc
XZHZLQMmS4F3FpJ9bew3SRbdf/1rbq0Bls5j4vqvntliv2O0Hsy/OaiidkdUNTpYWz++q/NpCuDF
WeKe+G+Tsf130T5ALtoN1d2ij/YEdShLV0yQxVeo7Im9tv6DRyX2P0dr9hCOA9jPU9oQ1AbbZj9/
7Uy6AgxaO6E6UWtncTf2vzPE49jDgm9mbOtJ2fYzIVQxNNbnNG0YasNm4uYMOD1Mc1A17YSqnZ3a
Df1Pi3tYNRTWwXps4rgvR6/tjGFCYv881nNH91tPsmefirMBAzba6v5cW4NKahWq08Rd+tv9qYeX
4jg2tjrewTp5XDpfY2nZfKo26fSINve1+SxsMIuPlViBf2kWqquK+8HbXetPYZoDDJmdfa6b8r51
sbKrpLcl3l9b/KzECiwmK1RtSOrV4u5PXRGsNcDQ2Gz/aXOr2u2qz4kLVRtqnVzbyrpW2W2AW3Jt
HSolLVTt6aitsW7Tpl0ctjnAoI3RukiWXAXA2DDUxtLVNodFcr5Ue0h6obh7sTwYhRfJULV5Ke3M
9DppvvDZv2nN0noup3YB7TpDa82U9/+hdUrs39Zt7yNaqyT2s9sC9jD2wDwah+qJh6r9pf+J1l2S
3f3JLB9t3zbHdgHtsJn/P5fy/kD0fvwh1Kta+2v9OmV/e9+WYLnOdwNRPY1QtXtNPxD3tP8JcRP/
prFLrY+Ju2Si8zSKZH2fL5Il75Oab4tbxyrJQvMSWTSYpcE+h93usgddL/prIqqoEaoWoo37Tce0
+G8sTC/MrUVAe87WmpzyvnX9a9ZX9TBxS1yvlHh/qriVAT7ppXWoLAtVmxZtK1l0Q7+VO6X5NIFA
3mxpn51T3rfLfjs5eL3Jf2tnooeKG7WXZPMK2/psrKiKIbNQta4myaUogE61smTPQmVnr+10j7L5
gXcRF6JJdhvsNmEtNgxRuxOqAJ3A7n1a16i0idKfFDftX7sOEvcMIfm5JmidL+4hWNoS10BThCrK
5GBx3aKSLPw+L4Pra2oTr9uAgbTnA7Zk0H7iFg4EBoVQRVmsIYv3O42zs9cbh/A5LxJ3GyAtqG2J
a7s1tjRzXqCCCFWUgf2cWleotGVSZkrrHivN2BmprQIwNvF+Y6SWTSNI90G0jVBFGRwnboHKNDYS
6uWMbe2wniw2x8XZKdvep/Vfkr5KK5CKUEWnW1/r+IxtNgLwGg/HsHundhvgAynbbOlru7XQbpdD
VByhik7WbI7U5yV9ZqqhaKzE+oC4y/44mw/DJhbaUJh7FW0gVNHJ7MHUezK2HSAuWH15XOskSZ/3
4t3RtmM9Hg9dilBFp3q/uCGlaX6u9YscjmlrsH1c3DpWSUdrXa/1xxyOiy5CqKIT2VP+iyR9jlQb
ZnpITse12wC26u+94m49xDXmXrVpL5l7FZkIVXSieVobZ2x7U/JdGPIhrRUlPdAN91XRFKGKTmSr
9y5NN6ml9WqBx0bJEaoA4BGhCgAeEaoA4BGhCgAeEaoA4FEHhGqtNmXKwO5FtyKUWs0WlxveAf/f
Qxsxav582XnKlPrcolsSSr1uM1+NHFV0O0Kr1Xp7BwZkK/1eJ9cB61qzZi1af7Ijfrk1aNLGdncl
/UUbvvArrpxaLfo+Lyi6JQH1VvN7vfCrHl6l3+u4DgjVen3mzNr5RbcilMmT69uKzLdRO8kRO11u
3ut6fv4/06fXiux/GpR+ryeJvGHzBYwvui0h1evz52ug3qC/10OZOLysftR40QGhCgDdg1AFAI8I
VQDwiFAFAI8IVQDwiFAFAI8IVQDwiFAFAI8IVQDwiFAFAI8IVQDwiFAFAI8IVQDwiFAFAI8IVQDw
iFAFAI8IVQDwiFAFAI8IVQDwKC1Ul9HaWmvtaPsjWtdrvRqwXQBQSslQ3UXrTK3k0rJ9Wvtr/SxA
mwCgtOKhuruWrWp6qdaftWxp3WlaO2lN0LpEa4bW7UFbCAAl0gjVNbS+qrWx1v/Gtv9A69daP9Ya
pnW4EKoAkKkRqgdo7SyLB2rDxVqHam2o9a5A7QKAUmqEqp193tlkv/vFheqLubcIAEqsEapXtthv
YvTxshzbAgCl104/1RW1ttK6Wuu8XFsDACXXKlRHaV0Q1ZFa/bm3CABKrFmorqP1E631tG7T2lTr
1gBtAoDSSgvVLbWOE3fJX4ve21zrZnG9BIZyC2CKuD6wDbXY6x6t6xL776H1whCOAwCFSgvVJ7SO
1VpOXOf/g8R1/rd+qmeLO1t9aJDHsf92hdi/a4ntKyT+3TPIzw8AHSEtVB+Lvb5J67tav9HaSKtX
3NnqoYM8zlNamySOOz96PZDYBgCl1c7Tf+ubup3WP7WWFXcrAACQot2p/54T99DKzlKTl+oAgMhg
5lO9N/r4Uh4NAYBuMJhQnRN9TJsfAAAggwvVtaOPDFUFgAzDE68XZOxnI6tsvtUbxPUEAACksCC1
PqMPaq0mbt7Uk7WeSexzjtbzWrsGbh8AlErjTHWE1mhxT/dtNJONfrpLa5LW9uJGU+2r9Wb4JgJA
eVio1rU+IG4Nqg20xmutLq5T/h/F9VF9vagGAkCZNM5UZ2mdWGRDAKAbDObpPwCgBUIVADwiVAHA
I0IVADwiVAHAI0IVADwiVAHAI0IVADwiVAHAI0IVADwiVAHAI0IVADwiVAHAI0IVADwiVAHAI0IV
ADwiVAHAow4I1Z6eqVP7Lyy6FaHU67Jyb+9mCwYGZj1bdFtCGjFik9Hz58v3pk6tV2adM/1ej+zt
fe8yAwNzKvW97ulZeaR+7Ufq9/rTRbcllJkza/963QGhOjDQ379wBddKqNXkg8sv/9t79IfunKLb
ElJPj/xQ6/QFC+TVotsSin69y48bd8b4gQE5uOi2hDRsmByoP9/36+/1rUW3JaC9Gi86IFRFnn22
9njRbQhl8uT6WvrLtpL+ZavM12ymTKnP1V+26U8/XXu56LaEot/rOfpHdG6Vfr6Nfq9f1q/72ap9
3Q0dEaoA0C0IVQDwiFAFAI8IVQDwiFAFAI8IVQDwiFAFAI8IVQDwiFAFAI8IVQDwiFAFAI8IVQDw
iFAFAI8IVQDwiFAFAI8IVQDwiFAFAI8IVQDwiFAFAI/aDdVttT6odbzWgvyaAwDl1k6orq51mdY4
rROFUAWATK1CtUfrQnGBCgBooVWoHqe1XoB2AEBXaBaqG2gdoHWK1mlhmgMA5ZYVqqO1LtHaX2uF
cM0BgHLLCtXvaP1B61qtvYK1BgBKLi1UP6K1ldb6gdsCAKWXDNVJWudpfUprTvjmAEC5JUP1fHGh
ekcBbQGA0ouHqj3pn6L1jRyO8zatv2dsG6b1RuK9NbWeyqEdAJCrRqhaiNloqQ9ozc/hOK9onRH7
tw0qODp6XU9sM7NzaAMA5G54VNZ96staD+d0nBe1jk0ctxGqA4ltAFBaFm5f0XpJ3L1UAMBSsFA9
Rutxrb9m7DMx9vp2cZfrZmetx/JrGgCUj4WqPShas839N4i9XsZ/cwCg3CxU12ixz/ZaZ0av36X1
ZvSap/MAkGCh2uoS/rnYa7tNMC+/5gBAubGcCgB4RKgCgEeEKgB41E6o3iau+5TJY7QVAHSNdkJ1
RlQAgBa4/AcAjwhVAPCIUAUAjwhVAPCIUAUAjwhVAPCIUAUAjwhVAPCIUAUAjwhVAPCIUAUAjwhV
APCIUAUAjwhVAPCIUAUAjzolVHuKbkA482oiw7Sq9DWb/lp//zP2NVfm6x4YeK5n2LCJFfxeL6jV
6/0V/LqdTgjVYVr9RTcilGeeGdV4+Y0i2xHarFkLf9R2KLodIT333EqNl5X5+TazZvUW3YRCdUKo
AkDXIFQBwKP/B+15kBm3sJsOAAAAAElFTkSuQmCC
"
id="image107777"
x="15.452877"
y="10.493591"
class="fragment fade-out"
data-fragment-index="1" />
<g
id="g126083"
class="fragment"
data-fragment-index="1">
<circle
style="fill:#ecd882;fill-opacity:1;stroke:#52548a;stroke-width:0.361016;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle122659"
cx="47.489136"
cy="43.716064"
r="3.0430741" />
<circle
style="fill:#ecd882;fill-opacity:1;stroke:#52548a;stroke-width:0.361016;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle116132"
cx="68.655807"
cy="43.716064"
r="3.0430741" />
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="45.315971"
y="45.773476"
id="text117620"><tspan
sodipodi:role="line"
id="tspan117618"
style="font-weight:bold;stroke-width:0.264583"
x="45.315971"
y="45.773476">X</tspan></text>
<circle
style="fill:#ecd882;fill-opacity:1;stroke:#52548a;stroke-width:0.361016;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle126031"
cx="26.322468"
cy="22.549397"
r="3.0430741" />
<text
xml:space="preserve"
style="font-size:5.64444px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;stroke-width:0.264583"
x="23.924683"
y="24.467064"
id="text118980"><tspan
sodipodi:role="line"
id="tspan118978"
style="font-weight:bold;stroke-width:0.264583"
x="23.924683"
y="24.467064">O</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 29.538027,22.378837 h 4.152212"
id="path121013" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 40.121361,22.378837 h 4.152212"
id="path121095" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 50.704695,22.378837 h 4.152212"
id="path121097" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 61.288029,22.378837 h 4.152212"
id="path121099" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 29.538027,65.08096 h 4.152212"
id="path121101" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 40.121361,65.08096 h 4.152212"
id="path121103" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 50.704695,65.08096 h 4.152212"
id="path121105" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 61.288029,65.08096 h 4.152212"
id="path121107" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 68.633562,25.869418 V 30.02163"
id="path121109" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 68.633562,36.452752 v 4.152212"
id="path121111" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 68.633562,46.875706 v 4.152212"
id="path121113" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 68.633562,57.61942 v 4.152212"
id="path121115" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 26.300226,25.869418 V 30.02163"
id="path121117" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 26.300226,36.452752 v 4.152212"
id="path121119" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 26.300226,47.036086 v 4.152212"
id="path121121" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 26.300226,57.61942 v 4.152212"
id="path121123" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 47.466894,47.036086 v 4.152212"
id="path121125" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 47.466894,57.61942 v 4.152212"
id="path121127" />
<circle
style="fill:#ecd882;fill-opacity:1;stroke:#52548a;stroke-width:0.361016;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle121289"
cx="68.655807"
cy="54.2994"
r="3.0430741" />
<circle
style="fill:#ecd882;fill-opacity:1;stroke:#52548a;stroke-width:0.361016;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle121371"
cx="68.655807"
cy="64.882736"
r="3.0430741" />
<circle
style="fill:#ecd882;fill-opacity:1;stroke:#52548a;stroke-width:0.361016;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle122653"
cx="58.072472"
cy="64.882736"
r="3.0430741" />
<circle
style="fill:#ecd882;fill-opacity:1;stroke:#52548a;stroke-width:0.361016;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle122655"
cx="47.489136"
cy="64.882736"
r="3.0430741" />
<circle
style="fill:#ecd882;fill-opacity:1;stroke:#52548a;stroke-width:0.361016;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle122657"
cx="47.489136"
cy="54.2994"
r="3.0430741" />
<circle
style="fill:#ecd882;fill-opacity:1;stroke:#52548a;stroke-width:0.361016;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle126021"
cx="36.9058"
cy="64.882736"
r="3.0430741" />
<circle
style="fill:#ecd882;fill-opacity:1;stroke:#52548a;stroke-width:0.361016;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle126023"
cx="26.322468"
cy="64.882736"
r="3.0430741" />
<circle
style="fill:#ecd882;fill-opacity:1;stroke:#52548a;stroke-width:0.361016;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle126025"
cx="26.322468"
cy="54.2994"
r="3.0430741" />
<circle
style="fill:#ecd882;fill-opacity:1;stroke:#52548a;stroke-width:0.361016;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle126027"
cx="26.322468"
cy="43.716064"
r="3.0430741" />
<circle
style="fill:#ecd882;fill-opacity:1;stroke:#52548a;stroke-width:0.361016;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle126029"
cx="26.322468"
cy="33.132729"
r="3.0430741" />
<circle
style="fill:#ecd882;fill-opacity:1;stroke:#52548a;stroke-width:0.361016;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle126033"
cx="36.9058"
cy="22.549397"
r="3.0430741" />
<circle
style="fill:#ecd882;fill-opacity:1;stroke:#52548a;stroke-width:0.361016;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle126035"
cx="47.489136"
cy="22.549397"
r="3.0430741" />
<circle
style="fill:#ecd882;fill-opacity:1;stroke:#52548a;stroke-width:0.361016;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle126037"
cx="58.072472"
cy="22.549397"
r="3.0430741" />
<circle
style="fill:#ecd882;fill-opacity:1;stroke:#52548a;stroke-width:0.361016;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle126039"
cx="68.655807"
cy="22.549397"
r="3.0430741" />
<circle
style="fill:#ecd882;fill-opacity:1;stroke:#52548a;stroke-width:0.361016;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle126041"
cx="68.655807"
cy="33.132729"
r="3.0430741" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 23 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 65 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Binary file not shown.

View File

@ -51,18 +51,28 @@ class_name = "CSE-250 Fall 2022 - Section B"
<!-- Any Talk-Specific Footer Content Goes Here -->
<span style="margin-right: 150px;"><%= date %></span>
<span style="margin-right: 150px; background-color: lightgray; border-radius: 3px; padding: 3px;"><a href="<%= out_path %>?print-pdf">🖶</a></span>
<span>© Oliver Kennedy, Andrew Hughes; The University at Buffalo, SUNY</span>
<span style="display: inline-block; text-align: right">© Oliver Kennedy, Andrew Hughes; The University at Buffalo, SUNY
<% if defined? attribution %><br><span style="font-size: 70%"><%=attribution%></span><% end %></span>
</div>
<div class="slides">
<section>
<% if defined? cat %>
<div style="display: flex; flex-direction: columns">
<div style="width: 300px;">
<img src="<%=cat%>" width="300px">
</div><div style="width: 500px; font-size: 50%">
<% end %>
<h3><%= title %></h3>
<h4><%= class_name %></h4>
<p><%= date %></p>
<% if defined? textbook %>
<h5><b>Textbook</b>: <%= textbook %></h5>
<% end %>
<% if defined? cat %>
</div></div>
<% end %>
</section>