Please help with the program below. Need to write a program called dfs-stack.py in python that uses the algorithm below without an agency list but instead uses an adjacency matrix. The program should prompt the user for the number of vertices V, in the graph.Please read the directions below I will post a picture of the instructions and the algorithm.

Computer Networking: A Top-Down Approach (7th Edition)
7th Edition
ISBN:9780133594140
Author:James Kurose, Keith Ross
Publisher:James Kurose, Keith Ross
Chapter1: Computer Networks And The Internet
Section: Chapter Questions
Problem R1RQ: What is the difference between a host and an end system? List several different types of end...
icon
Related questions
Question
Please help with the program below. Need to write a program called dfs-stack.py in python that uses the algorithm below without an agency list but instead uses an adjacency matrix. The program should prompt the user for the number of vertices V, in the graph.Please read the directions below I will post a picture of the instructions and the algorithm.
**Algorithm 2.3: Graph Depth-First Search with a Stack**

This algorithm describes the process of performing a depth-first search (DFS) on a graph using a stack.

**StackDFS(G, node) → visited**

- **Input:** 
  - \( G = (V, E) \), a graph
  - `node`, the starting vertex in \( G \)

- **Output:** 
  - `visited`, an array of size \(|V|\) such that `visited[i]` is `TRUE` if we have visited node \( i \), `FALSE` otherwise

**Procedure:**
1. \( S \leftarrow \text{CreateStack()} \)
2. `visited` \(\leftarrow \text{CreateArray}(|V|) \)
3. For \( i \leftarrow 0 \) to \(|V|\) do
   1. `visited[i]` \(\leftarrow \text{FALSE}\)
4. `Push(S, node)`
5. While not `IsStackEmpty(S)` do
   1. \( c \leftarrow \text{Pop}(S) \)
   2. `visited[c]` \(\leftarrow \text{TRUE}\)
   3. For each \( u \) in `AdjacencyList(G, c)` do
      - If not `visited[u]` then
        - `Push(S, u)`
6. Return `visited`

### Explanation:
- The algorithm initializes a stack \( S \) and a `visited` array.
- It sets all values in the `visited` array to `FALSE`.
- The starting node is pushed onto the stack.
- The algorithm iterates as long as the stack is not empty:
  - It pops an element from the stack, marks it as visited, and then pushes its adjacent nodes (if not already visited) onto the stack.
- The process continues until all reachable nodes are visited.
- Finally, the `visited` array is returned, indicating which nodes have been visited.
Transcribed Image Text:**Algorithm 2.3: Graph Depth-First Search with a Stack** This algorithm describes the process of performing a depth-first search (DFS) on a graph using a stack. **StackDFS(G, node) → visited** - **Input:** - \( G = (V, E) \), a graph - `node`, the starting vertex in \( G \) - **Output:** - `visited`, an array of size \(|V|\) such that `visited[i]` is `TRUE` if we have visited node \( i \), `FALSE` otherwise **Procedure:** 1. \( S \leftarrow \text{CreateStack()} \) 2. `visited` \(\leftarrow \text{CreateArray}(|V|) \) 3. For \( i \leftarrow 0 \) to \(|V|\) do 1. `visited[i]` \(\leftarrow \text{FALSE}\) 4. `Push(S, node)` 5. While not `IsStackEmpty(S)` do 1. \( c \leftarrow \text{Pop}(S) \) 2. `visited[c]` \(\leftarrow \text{TRUE}\) 3. For each \( u \) in `AdjacencyList(G, c)` do - If not `visited[u]` then - `Push(S, u)` 6. Return `visited` ### Explanation: - The algorithm initializes a stack \( S \) and a `visited` array. - It sets all values in the `visited` array to `FALSE`. - The starting node is pushed onto the stack. - The algorithm iterates as long as the stack is not empty: - It pops an element from the stack, marks it as visited, and then pushes its adjacent nodes (if not already visited) onto the stack. - The process continues until all reachable nodes are visited. - Finally, the `visited` array is returned, indicating which nodes have been visited.
### Educational Resource: Implementing Graph Depth-First Search (DFS) in Python

#### Instructions

1. **Objective**: You will create a Python program named `dfs-stack.py` to implement Algorithm 2.3, which performs a graph depth-first search (DFS) using a stack.
2. **Requirements**:
   - Avoid using an adjacency list as in Algorithm 2.3.
   - Instead, utilize an adjacency matrix (a two-dimensional array or a list of lists in Python).
   - You can use any list methods (e.g., `append`, `pop`).

#### Implementation Details:

1. **Algorithm Development**:
   - Create a complete algorithmic solution using pseudocode. Integrate the logic provided in Algorithm 2.3.

2. **Code Documentation**:
   - Include your name and a Certificate of Authenticity as comments at the start of your Python code. Acknowledge any collaborators.

3. **User Interaction**:
   - Prompt the user for the number of vertices, `V`, in the graph, `G`.

4. **Graph Representation**:
   - Represent `G` using an adjacency matrix: a square matrix with a row and column for each vertex.
   - Initialize a matrix `M` of dimensions V x V, using zero for each element initially.

5. **Matrix Population**:
   - Allow the user to specify which elements in the matrix should have a value of 1, indicating connections between vertices.

6. **Matrix Display**:
   - After creating the adjacency matrix, print it for the user.

7. **Node Selection**:
   - Prompt the user to specify the starting vertex in `G`.

8. **Algorithm Implementation**:
   - Implement Algorithm 2.3, using the adjacency matrix.
   - Print the values on the stack during execution.
   - Print values on the stack at the end of the white block in the algorithm.

By executing step 8, you will display how the stack evolves during your implementation of the DFS algorithm on graph `G`.
Transcribed Image Text:### Educational Resource: Implementing Graph Depth-First Search (DFS) in Python #### Instructions 1. **Objective**: You will create a Python program named `dfs-stack.py` to implement Algorithm 2.3, which performs a graph depth-first search (DFS) using a stack. 2. **Requirements**: - Avoid using an adjacency list as in Algorithm 2.3. - Instead, utilize an adjacency matrix (a two-dimensional array or a list of lists in Python). - You can use any list methods (e.g., `append`, `pop`). #### Implementation Details: 1. **Algorithm Development**: - Create a complete algorithmic solution using pseudocode. Integrate the logic provided in Algorithm 2.3. 2. **Code Documentation**: - Include your name and a Certificate of Authenticity as comments at the start of your Python code. Acknowledge any collaborators. 3. **User Interaction**: - Prompt the user for the number of vertices, `V`, in the graph, `G`. 4. **Graph Representation**: - Represent `G` using an adjacency matrix: a square matrix with a row and column for each vertex. - Initialize a matrix `M` of dimensions V x V, using zero for each element initially. 5. **Matrix Population**: - Allow the user to specify which elements in the matrix should have a value of 1, indicating connections between vertices. 6. **Matrix Display**: - After creating the adjacency matrix, print it for the user. 7. **Node Selection**: - Prompt the user to specify the starting vertex in `G`. 8. **Algorithm Implementation**: - Implement Algorithm 2.3, using the adjacency matrix. - Print the values on the stack during execution. - Print values on the stack at the end of the white block in the algorithm. By executing step 8, you will display how the stack evolves during your implementation of the DFS algorithm on graph `G`.
Expert Solution
Step 1

Python Code

#It uses a Python dict for easiness
graphDFS = {
 '1': ['4', '6'],
 '5': ['1', '9'],
 '9': ['5'],
 '4': [],
 '6': ['1', '2'],
 '2': []
}

vertexSeen = set()  # Tracks the vertexSeen nodes of graphDFS.


def dfs(vertexSeen, graphDFS, node):  #DFS function
 if node not in vertexSeen:
  print(node)
  vertexSeen.add(node)
  for neighbour in graphDFS[node]:
   dfs(vertexSeen, graphDFS, neighbour)


# Driver Code
print("Following is the Depth-First Search")
dfs(vertexSeen, graphDFS, '5')

steps

Step by step

Solved in 2 steps with 1 images

Blurred answer
Similar questions
  • SEE MORE QUESTIONS
Recommended textbooks for you
Computer Networking: A Top-Down Approach (7th Edi…
Computer Networking: A Top-Down Approach (7th Edi…
Computer Engineering
ISBN:
9780133594140
Author:
James Kurose, Keith Ross
Publisher:
PEARSON
Computer Organization and Design MIPS Edition, Fi…
Computer Organization and Design MIPS Edition, Fi…
Computer Engineering
ISBN:
9780124077263
Author:
David A. Patterson, John L. Hennessy
Publisher:
Elsevier Science
Network+ Guide to Networks (MindTap Course List)
Network+ Guide to Networks (MindTap Course List)
Computer Engineering
ISBN:
9781337569330
Author:
Jill West, Tamara Dean, Jean Andrews
Publisher:
Cengage Learning
Concepts of Database Management
Concepts of Database Management
Computer Engineering
ISBN:
9781337093422
Author:
Joy L. Starks, Philip J. Pratt, Mary Z. Last
Publisher:
Cengage Learning
Prelude to Programming
Prelude to Programming
Computer Engineering
ISBN:
9780133750423
Author:
VENIT, Stewart
Publisher:
Pearson Education
Sc Business Data Communications and Networking, T…
Sc Business Data Communications and Networking, T…
Computer Engineering
ISBN:
9781119368830
Author:
FITZGERALD
Publisher:
WILEY