These two programs below are didividual, YOU HAVE TO DO BOTH.
Program 1: Computing determinants of matrices
Computing determinants of matrices is a key part of several matrix operations, among them is one way to compute the inverse of a matrix. Computing the determinant of an n x n matrix can easily be expressed recursively. Before seeing how, we need a definition.
Submatrix
A submatrix of an n x n matrix is a matrix of size (n-1) x (n-1) created by removing one row and one column from the original n x n matrix. We will use the notation Sr,c(M) to denote the submatrix created by removing row r and column c of M. For example, given the matrix, M:
10 11 12 13
20 21 22 23
30 31 32 33
40 41 42 43
the matrix S1,2(M) would be:
10 11 13
30 31 33
40 41 43
Recursive algorithm for computing the determinant
Base Case: The determinant of a 2x2 matrix, M, is a single floating point number:
M[0][0]*M[1][1] - M[1][0]*M[0][1]
Recursive expression: The determinant of an n x n matrix M (n > 2) – written as det(M) – can be defined recursively as:
det(M) = M[0][0]*det(S0,0(M)) - M[0][1]*det(S0,1(M)) + M[0][2]*det(S0,2(M)) ... M[0][n-1]*det(S0,n-1(M))
or equivalently:
Notice the alternating signs in the two equivalent expressions above.
class Matrix
Create a class Matrix to represent a square matrix of double precision floating point numbers that includes the following public methods:
class Matrix // always a square matrix
{
public:
Matrix(std::istream& inp, int n); // Create storage for n x n matrix and read its n*n values from "inp"
Matrix(const Matrix& M, int r, int c); // Create Sr,c(M); if M is nxn, the new matrix will be (n-1)x(n-1)
double det() const; // implement the recursive algorithm outlined above
…
}
Storage for each Matrix instance must be dynamically allocated and be of exactly the size needed. You will recall that there are (at least) two very different ways to do this. In one case, the Matrix elements will be stored in a structure whose base pointer is of type "double*"; in the other, the base type will be "double**".
Program 2: Driving a tank through electric fields
This project will be to develop a recursive backtracking solution to solve the problem illustrated and explained in the image on the right. Your program will read the description of an electric field from a file. The first two numbers in the file are the number of rows and columns in the grid. The remainder of the file will contain the (nRows * nCols) non-blank characters as indicated in the figure on the right. There must be exactly one 'S' and exactly one 'E'.
Here are some sample files:
[login to view URL]
[login to view URL]
[login to view URL]
[login to view URL]
[login to view URL]
[login to view URL]
6 7 8
4 5
1 2 3
Not all electric fields will have a solution. Moreover, a given electric field may have multiple solutions. Like all backtracking algorithms, you select candidate solutions for each successive sub-problem (here, for the sub-problem of where to go next). The order in which you test candidate solutions affects the solution you find in instances where multiple solutions are possible. To produce the results shown below, you must test candidate solutions in the order shown on the right. The blank square denotes the current cell; candidate "next" cells are to be examined in the order indicated.
Sample Program Executions
$ ./lab07 [login to view URL]
Electric Field as read:
- + - + -
+ + - - +
- + + + S
- + E - -
- + + - +
Solution:
16 13 14 3 2
17 15 12 4 1
18 19 5 11 S
20 21 E 6 10
22 23 7 8 9
$
$ ./lab07 [login to view URL]
Electric Field as read:
- + - + -
+ + - + +
- + + + S
- + E + -
- + + - +
No solution possible.
$
Hi there, I am an expert in data structures and algorithms having experience of 3+ yrs. I would like to invite you to initiate the chat to discuss further about this project.
Thanks
Shyam S Kumawat