Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Project 4: Maze Solver The purpose of this assignment is to assess your ability to: Implement stack and queue abstract data types Utilize stack and

Project 4: Maze Solver

The purpose of this assignment is to assess your ability to:

  • Implement stack and queue abstract data types
  • Utilize stack and queue structures in a computational problem.

This assignment reinforces competency 6.1: Select and utilize data structures appropriate to a given computational problem.

For this project, implement a stack and a queue data structure. After testing the class, complete the depth-first search method (provided). The method should indicate whether or not a path was found, and, in the case that a path is found, output the sequence of coordinates from start to end.

The following code and related files are provided. Carefully ready the code and documentation before beginning.

  • A MazeCell class that models a cell in the maze. Each MazeCell object contains data for the row and column position of the cell, the next direction to check, and a bool variable that indicates whether or not the cell has already been visited.
  • A Source file that creates the maze and calls your depth-first search method.
  • An input file, maze.in, that may be used for testing.

You will write the following:

  • a generic stack class, called MyStack, that supports the provided API (see file stackAPI.png)
  • a generic queue class, called MyQueue, that supports the provided API (see file queueAPI.png)
  • an implementation for the depth-first algorithm

Create a Loom video with a length of 5 minutes or less in which you run your code and comment on the following:

  • Your data structure choices for the stack and queue implementation.
  • Your use of MyStack and MyQueue structures in your maze solution
  • Your depth first algorithm

Submit the following:

  • A zip file with your code

------------------

//Source for MazeSolver

#include #include #include #include #include "myStack.h" #include "MyQ.h" #include "MazeCell.h"

using namespace std;

#define NORTH 0 #define EAST 1 #define SOUTH 2 #define WEST 3 #define DONE 4 #define SUCCESS 10 #define FAILURE 20

//method headers*******************************************************

//depthFirst header void depthFirst(MazeCell start, MazeCell end);

//global variables*****************************************************

//# rows and cols in the maze int rows, cols; //pointer to the grid (2-d array of ints) int** grid; //pointer to the maze cells (2-d array of MazeCell objects) MazeCell** cells;

int main() { //create the Maze from the file ifstream fin("maze.in"); if(!fin){ cout << "File not found "; exit(2); }

//read in the rows and cols fin >> rows >> cols;

//create the maze rows grid = new int* [rows]; //add each column for (int i = 0; i < rows; i++) grid[i] = new int[cols];

//read in the data from the file to populate for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { fin >> grid[i][j]; } }

//look at it for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { if (grid[i][j] == 3) cout << "S" << " "; else if (grid[i][j] == 4) cout << "E" << " "; else cout << grid[i][j] << " "; } cout << endl; }

//make a 2-d array of cells cells = new MazeCell * [rows]; for (int i = 0; i < rows; i++) { cells[i] = new MazeCell[cols]; }

//all MazeCell in the cells grid has a default init //only update those cells that are not walls

MazeCell start, end; //iterate over the grid for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { if (grid[i][j] != 0) { cells[i][j].setCoordinates(i, j); //look for the start and end cells if (grid[i][j] == 3) start = cells[i][j]; if (grid[i][j] == 4) end = cells[i][j]; }

} } //testing cout <<"start: "<< start << " end: " << end << endl; //solve it! depthFirst(start, end);

return 0; }

//this function should find a path through the maze //if found, output the path from start to end //if not path exists, output a message stating so

void depthFirst(MazeCell start, MazeCell end) {

-------------

/* * * CST-201, Maze Solver Project * Provided starter code * MazeCell class * DO NOT CHANGE THIS FILE * */

#ifndef MAZECELL_H #define MAZECELL_H

#include

using namespace std;

//models an open cell in a maze //each cell knows its coordinates (row, col), //direction keeps track of the next unchecked neighbor. //a cell is considered 'visited' once processing moves to a neighboring cell //the visited variable is necessary so that a cell is not eligible for visits //from the cell just visited

class MazeCell { private:

int row, col; //direction to check next //0: north, 1: east, 2: south, 3: west, 4: complete int direction; bool visited;

public: //set row and col with r and c MazeCell(int r, int c) { row = r; col = c; direction = 0; visited = false; }

//no-arg constructor MazeCell() { row = col = -1; direction = 0; visited = false; }

//copy constructor MazeCell(const MazeCell& rhs) { this->row = rhs.row; this->col = rhs.col; this->direction = rhs.direction; this->visited = rhs.visited; }

int getDirection()const { return direction; }

//update direction. if direction is 4, mark cell as visited void advanceDirection() { direction++; if (direction == 4) visited = true; }

//change row and col to r and c void setCoordinates(int r, int c) { this->row = r; this->col = c; }

int getRow()const { return row; }

int getCol()const { return col; }

//cells are equal if they have the same row and col, respectively bool operator==(const MazeCell& rhs)const { return row == rhs.row && col == rhs.col; }

bool operator!=(const MazeCell& rhs)const { return !((*this) == rhs); }

//output cell as ordered pair friend ostream& operator<<(ostream& out, const MazeCell& rhs) { out << "(" << rhs.row << "," << rhs.col << ")"; return out; }

//set visited status to true void visit() { visited = true; }

//reset visited status void reset() { visited = false; }

//return true if this cell is unvisited bool unVisited()const { return !visited; }

//may be useful for testing, return string representation of cell string toString()const { string str = "(" + to_string(getRow()) + "," + to_string(getCol())+ ")"; return str; }

};

#endif

}

-----------------

4 6 1 1 3 1 1 1 1 0 1 0 0 1 1 0 1 0 1 1 1 1 0 0 4 0

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Seven Databases In Seven Weeks A Guide To Modern Databases And The NoSQL Movement

Authors: Luc Perkins, Eric Redmond, Jim Wilson

2nd Edition

1680502530, 978-1680502534

More Books

Students also viewed these Databases questions

Question

Identify global safety and health issues.

Answered: 1 week ago