Question

During the course, we have seen a recursive implementation for the DFS graph visit. There is...

During the course, we have seen a recursive implementation for the DFS graph visit. There is also a simple equivalent iterative implementation that uses a stack as an auxiliary data structure (it runs just like the BFS algorithm, except that we use the stack in place of the queue). However, there is an algorithm that iteratively implements the DFS visit and does not use any auxiliary data structure. Design this algorithm and implement it.

0 0
Add a comment Improve this question Transcribed image text
Answer #1

As we know Depth First Traversal for a graph is similar to Depth First Traversal (DFS) of a tree. The only difference here is, unlike trees, graphs may contain cycles, so we may come to the same node again. To avoid processing a node more than once, we use a boolean variable visited array.

So the algorithm works in same manner here like :

void Graph::DFS(int s)

{

    // to Initially mark all verices as not visited

    vector<bool> visited(V, false);

  

    // to Create a stack for DFS

    stack<int> stack;

  

    // to Push the current source node.

    stack.push(s);

  

    while (!stack.empty())

    {

        // to Pop a vertex from stack and print it

        s = stack.top();

        stack.pop();

  

        // to Stack may contain same vertex twice. So we need to print the popped item only if it is not visited.

        if (!visited[s])

        {

            cout << s << " ";

            visited[s] = true;

        }

  

        // to Get all adjacent vertices of the popped vertex s If a adjacent has not been visited, then push it to the stack.

        for (auto i = adj[s].begin(); i != adj[s].end(); ++i)

            if (!visited[*i])

                stack.push(*i);

    }

}

Add a comment
Know the answer?
Add Answer to:
During the course, we have seen a recursive implementation for the DFS graph visit. There is...
Your Answer:

Post as a guest

Your Name:

What's your source?

Earn Coins

Coins can be redeemed for fabulous gifts.

Not the answer you're looking for? Ask your own homework help question. Our experts will answer your question WITHIN MINUTES for Free.
Similar Homework Help Questions
  • For the following problem, use your graph class from above. In class we studied BFS. Although...

    For the following problem, use your graph class from above. In class we studied BFS. Although we discussed the algorithm, we didn't provde the code. In the graph above, the BFS will visit 2 8 4 7 6 Figure 5: A graph of order 8. all nodes if starting with 1; however, any other node will not lead to all nodes being visited. BFS actually keeps track of not only visited nodes, but unvisited. Unvisited nodes are the nodes that...

  • C++ Linked List Implementation Motivation As we discussed in class, the data structures that you use...

    C++ Linked List Implementation Motivation As we discussed in class, the data structures that you use to implement your program can have a profound impact on it's overall performance. A poorly written program will often need much more RAM and CPU time then a well-written implementation. One of the most basic data structure questions revolves around the difference between an array and a linked list. After you finish this assignment you should have a firm understanding of their operation. Problem...

  • EVALUATING GENERAL INFIX EXPRESSIONS INTRODUCTION The notation in which we usually write arithmetic expressions is called infix notation;...

    EVALUATING GENERAL INFIX EXPRESSIONS INTRODUCTION The notation in which we usually write arithmetic expressions is called infix notation; in it, operators are written between their operands: X + Y. Such expressions can be ambiguous; do we add or multiply first in the expression 5 + 3 * 2? Parentheses and rules of precedence and association clarify such ambiguities: multiplication and division take precedence over addition and subtraction, and operators associate from left to right. This project implements and exercises a stack-based algorithm that evaluates...

  • CSC311: For a while now we have been discussing reference-based data structures and we have seen...

    CSC311: For a while now we have been discussing reference-based data structures and we have seen reference-based implementations of the List, Stack, and Queue ADT. For this program, you will write a reference-based implementation of the Dictionary ADT as follows: a. A Dictionary ADT is an (abstract) data type composed of a collection of (key, value) pairs, such that each possible key appears at most once in the collection, promptly. b. Operations associated with this data type allow: a. the...

  • ArrayQueue

    Implement the ArrayQueue classIn the ‘Queues’ lecture, review the ‘Introduce next lab’ section.  See here that we can use a circular array to implement the queue data structure.  You must write a class named ArrayQueue that does this.ArrayQueue will be a generic class, that implements our generic QueueInterface interface.  This demonstrates the Java interface feature, where we have already implemented queue dynamically, using the LinkedQueue class covered during the lecture.Many classes are given to youDownload and unzip the Circular array project from Canvas, ‘Queues’ module, Example programs.  Open the project in...

  • Description In this homework, you are asked to implement a multithreaded program that will allow ...

    Description In this homework, you are asked to implement a multithreaded program that will allow us to measure the performance (i.e, CPU utilization, Throughput, Turnaround time, and Waiting time in Ready Queue) of the four basic CPU scheduling algorithms (namely, FIFO, SJE PR, and RR). Your program will be emulating/simulating the processes whose priority, sequence of CPU burst time(ms) and I'O burst time(ms) will be given in an input file. Assume that all scheduling algorithms except RR will be non-preemptive,...

  • **TStack.py below** # CMPT 145: Linear ADTs # Defines the Stack ADT # # A stack (also called a pushdown or LIFO stack)...

    **TStack.py below** # CMPT 145: Linear ADTs # Defines the Stack ADT # # A stack (also called a pushdown or LIFO stack) is a compound # data structure in which the data values are ordered according # to the LIFO (last-in first-out) protocol. # # Implementation: # This implementation was designed to point out when ADT operations are # used incorrectly. def create(): """ Purpose creates an empty stack Return an empty stack """ return '__Stack__',list() def is_empty(stack): """...

  • In this assessment, you are required to program an Algorithm-based agent to solve a real-world, which is a challenging case study. This assessment is done individually, and you are required to submit programs and supporting documents in report format. Ple

    You are required to create a robot path planner that is able to find an optimal path to navigate an environment and reach a target. By completing this assessment, you will show your skills on leveraging the best algorithm to solve a simplified real-world problem.The maze can be seen in the image below. It can be seen that there are 12 rows and 24 columns, meaning there is a total of 288 blocks on the map. There are four different...

  • ------------------------------------------------------------------------------------------------------------ CODE ALREADY HAVE BELOW--------------------------------------------------------------------------------------- public class LinkedQueue<T>

    ------------------------------------------------------------------------------------------------------------ CODE ALREADY HAVE BELOW--------------------------------------------------------------------------------------- public class LinkedQueue<T> implements QueueADT<T> {    private int count;    private LinearNode<T> head;    private LinearNode<T> tail;               public LinkedQueue()    {        count = 0;        head = null;        tail = null;    }    @Override    public void enqueue(T element)    {        LinearNode<T> node = new LinearNode<T> (element);        if(isEmpty())            head = node;        else           ...

  • Please to indent and follow structure!!!!! Assignment 3 - The card game: War Due Date: June...

    Please to indent and follow structure!!!!! Assignment 3 - The card game: War Due Date: June 9th, 2018 @ 23:55 Percentage overall grade: 5% Penalties: No late assignments allowed Maximum Marks: 10 Pedagogical Goal: Refresher of Python and hands-on experience with algorithm coding, input validation, exceptions, file reading, Queues, and data structures with encapsulation. The card game War is a card game that is played with a deck of 52 cards. The goal is to be the first player to...

ADVERTISEMENT
Free Homework Help App
Download From Google Play
Scan Your Homework
to Get Instant Free Answers
Need Online Homework Help?
Ask a Question
Get Answers For Free
Most questions answered within 3 hours.
ADVERTISEMENT
ADVERTISEMENT