|
Answer» E using namespace std; class sparse_matrix { const static int MAX = 100; int **data; int row, COL; int len; public: sparse_matrix(int r, int c) { // initialize row row = r; // initialize col col = c; // initialize length to 0 len = 0; //Array of Pointer to make a matrix data = new int *[MAX]; for (int i = 0; i < MAX; i++) data[i] = new int[3]; } // insert elements into sparse matrix void insert(int r, int c, int val) { if (r > row || c > col) { cout << "Wrong entry"; } else { // insert row value data[len][0] = r; // insert col value data[len][1] = c; // insert element's value data[len][2] = val; // increment number of data in matrix len++; } } void multiply(sparse_matrix b) { if (col != b.row) { // Invalid multiplication cout << "Can't multiply, Invalid dimensions"; return; } b = b.transpose(); int apos, bpos; sparse_matrix result(row, b.row); // iterate over all elements of A for (apos = 0; apos < len;) { // current row of result matrix int r = data[apos][0]; // iterate over all elements of B for (bpos = 0; bpos < b.len;) { // current column of result matrix // data[,0] used as b is transposed int c = b.data[bpos][0]]; int tempa = apos; int tempb = bpos; int sum = 0; while (tempa < len && data[tempa][0] == r && tempb < b.len && b.data[tempb][0] == c) { if (data[tempa][1] < b.data[tempb][1] tempa++; else if (data[tempa][1] > b.data[tempb][1]) tempb++; else // same col, so multiply and increment sum += data[tempa++][2] * b.data[tempb++][2]; } // insert sum OBTAINED in result[r] // if its not equal to 0 if (sum != 0) result.insert(r, c, sum); while (bpos < b.len && b.data[bpos][0] == c) // jump to next column bpos++; } while (apos < len && data[apos][0] == r) // jump to next row apos++; } result.print(); } // printing matrix void print() { cout << "\nDimension: " << row << "X" << col; cout << "\nSparse Matrix \nRow\tColumn\tValue\n"; for (int i = 0; i < len; i++) { cout << data[i][0] << "\t " << data[i][1] << "\t " << data[i][2] << endl; } } }; int main() { //Code Whatever You Want}
|