AuD
Lecture 'Algorithmen und Datenstrukturen' (code examples)
aud.example.graph.IterativeDFS1 Class Reference

Iterative implementation of DFS. More...

+ Inheritance diagram for aud.example.graph.IterativeDFS1:
+ Collaboration diagram for aud.example.graph.IterativeDFS1:

Public Member Functions

 IterativeDFS1 (MyGraph g)
 
String name ()
 get traversal name More...
 
void start (MyNode s0)
 start traversal at node s0 More...
 
- Public Member Functions inherited from aud.example.graph.Traversal
 Traversal (MyGraph g)
 initiate traversal of g
More...
 
abstract String name ()
 get traversal name More...
 
abstract void start (MyNode s0)
 start traversal at node s0 More...
 
void showMark (MyNode node)
 callback to give visual feedback on marking a node More...
 

Additional Inherited Members

- Public Attributes inherited from aud.example.graph.Traversal
SingleStepper singlestepper = null
 may halt if single stepper was set More...
 
int nsteps = 1
 halt every nsteps steps in time_
More...
 
int verbose = 0
 set verbosity (extra output if >0) More...
 
- Protected Member Functions inherited from aud.example.graph.Traversal
void initialize ()
 initialize graph for traversal (reset all attributes), provided for convenience to be called by start More...
 
- Protected Attributes inherited from aud.example.graph.Traversal
MyGraph g_ = null
 
int time_ = 0
 

Detailed Description

Iterative implementation of DFS.

Traversal like DepthFirstSearch but order of processed edges differs. We use a second stack to keep track of the parent node in the spanning tree. (This could be solved differently. Note, however, that we have to transfer the "complete state" near push.)

In contrast to IterativeDFS2, nodes are marked only when they are popped off the stack. This simulates the recursive DepthFirstSearch best, but allows to the stack size to grow beyond the number of nodes!

See also
IterativeDFS2

Definition at line 17 of file IterativeDFS1.java.

Constructor & Destructor Documentation

◆ IterativeDFS1()

Definition at line 19 of file IterativeDFS1.java.

19 {
20 super(g);
21 }

Member Function Documentation

◆ name()

String aud.example.graph.IterativeDFS1.name ( )

get traversal name

Reimplemented from aud.example.graph.Traversal.

Definition at line 23 of file IterativeDFS1.java.

23{ return "iterative DFS (close to DFS)"; };

◆ start()

void aud.example.graph.IterativeDFS1.start ( MyNode  s0)

start traversal at node s0

Reimplemented from aud.example.graph.Traversal.

Definition at line 25 of file IterativeDFS1.java.

25 {
26 initialize(); // reset all node attributes
27
28 int count=0;
29 Stack<MyNode> open=new Stack<MyNode>();
30 Stack<MyNode> parent=new Stack<MyNode>();
31
32 s0.d=0.0;
33 open.push(s0);
34 parent.push(null);
35
36 while (!open.is_empty()) {
37 if (verbose>0)
38 System.out.println("open="+open.toString());
39
40 MyNode s=open.pop();
41 MyNode p=parent.pop();
42
43 if (s.ord<0) {
44 s.ord=count++; // marked
45 s.p=p;
46
47 if (p!=null) {
48 MyEdge e=g_.getEdge(p,s);
49 s.d=p.d+(e.hasWeight() ? e.getWeight() : 1.0);
50 }
51
52 showMark(s);
53 showVisit(s);
54 }
55
56 for (MyEdge e : g_.getOutEdges(s)) {
57
58 if (verbose>1)
59 System.err.println(e);
60
61 MyNode t=(MyNode) e.destination();
62 if (t==s)
63 t=(MyNode) e.source(); // undirected graph
64
65 if (t.ord<0) { // not marked
66 open.push(t);
67 parent.push(s);
68 }
69 }
70 }
71 }
int verbose
set verbosity (extra output if >0)
Definition: Traversal.java:15
void initialize()
initialize graph for traversal (reset all attributes), provided for convenience to be called by start
Definition: Traversal.java:34
void showMark(MyNode node)
callback to give visual feedback on marking a node
Definition: Traversal.java:44
Vector< Edge > getOutEdges(Node node)
Definition: GraphAM.java:98
Edge getEdge(Node source, Node destination)
Definition: GraphAM.java:80

References aud.example.graph.MyNode.d, aud.example.graph.Traversal.g_, aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >.getEdge(), aud.graph.SimpleEdge.getWeight(), aud.graph.AbstractEdge.hasWeight(), aud.example.graph.Traversal.initialize(), aud.Stack< T >.is_empty(), aud.example.graph.MyNode.ord, aud.example.graph.MyNode.p, aud.Stack< T >.pop(), aud.Stack< T >.push(), aud.example.graph.Traversal.showMark(), aud.adt.AbstractStack< T >.toString(), and aud.example.graph.Traversal.verbose.

+ Here is the call graph for this function:

The documentation for this class was generated from the following file: