稀疏矩阵,用vector,实现抽象类

来源:互联网 发布:手机淘宝首页装修布局 编辑:程序博客网 时间:2024/05/16 03:22

Matrix16

Design a class Sparse that implements interface Matrix: Sparse should has the following public object functions in addition:
  1. A constructor Sparse(int rows, int column), which initializes all elements in the matrix to 0's.
  2. A function Sparse Sparse::operator + (Sparse & sparse2), which returns the pair-wise sum of two sparse matrixes.
EXAMPLE INPUT
1000000 10000001 1 101 1000000 501000000 1000000 201 1000000 301000000 1 401 1 -10
EXAMPLE OUTPUT
(1,1000000,80)(1000000,1,40)(1000000,1000000,20)
 
class Entry  {  public:       int row;       int column;       double value;   };          class Matrix  {      public:      virtual int size(int dimension) const = 0;            virtual void set(int row, int column,       double value) = 0;            virtual double get(int row, int column)       const = 0;          virtual void print() = 0;        };   #include<vector>#include<algorithm> #include <iostream>  using namespace std;     bool Comp1(const Entry &a,const Entry &b){return a.row<b.row;}bool Comp2(const Entry &a,const Entry &b){return (a.row==b.row&&a.column<b.column);}class Sparse : public Matrix{private:int _rows, _columns;vector<Entry> entry;public:Sparse(int rows, int column){_rows = rows;_columns = column;entry = vector<Entry>();}int size(int dimension) const{if(dimension == 1) return _rows;if(dimension == 2) return _columns;}void set(int row, int column, double value){Entry e;e.row = row;e.column = column;e.value = value;entry.push_back(e);}double get(int row, int column) const{for(int i=0; i < entry.size();i++){if(entry[i].row == row && entry[i].column == column ){return entry[i].value;}}}void print(){for(int i=0; i < entry.size();i++){cout<<"("<<entry[i].row<<","<<entry[i].column<<","<<entry[i].value<<")\n";}}Sparse operator + (Sparse & sparse2){Sparse s(_rows, _columns);for(int i=0; i < this->entry.size(); i++){for(int j = 0 ;j< sparse2.entry.size(); j++){if(this->entry[i].row == sparse2.entry[j].row && this->entry[i].column == sparse2.entry[j].column){Entry e;e.row = sparse2.entry[j].row;e.column =  sparse2.entry[j].column;e.value = this->entry[i].value + sparse2.entry[j].value;if(e.value)s.entry.push_back(e);this->entry[i].value = 0;sparse2.entry[j].value = 0;}}}for(int i=0; i < this->entry.size(); i++){Entry e;e.row = this->entry[i].row;e.column = this->entry[i].column;e.value = this->entry[i].value;if(e.value)s.entry.push_back(e);}for(int i=0; i < sparse2.entry.size(); i++){Entry e;e.row = sparse2.entry[i].row;e.column = sparse2.entry[i].column;e.value = sparse2.entry[i].value;if(e.value)s.entry.push_back(e);}sort(s.entry.begin(),s.entry.end(),Comp1);sort(s.entry.begin(),s.entry.end(),Comp2);return s;}}; void print(Matrix & matrix) {      matrix.print();  }   void readAndSetElement(Matrix & matrix) {      int row;      int column;      double value;      cin >> row >> column >> value;      matrix.set(row, column, value);  }    void readAndSetMultipleElements(Matrix & matrix, int count) {      for (int i = 0; i < count; ++ i) {          readAndSetElement(matrix);      }  }    int main() {      int rows;      int columns;      cin >> rows >> columns;           Sparse sparse1(rows, columns);      readAndSetMultipleElements(sparse1, 3);            Sparse sparse2(rows, columns);      readAndSetMultipleElements(sparse2, 3);            Sparse sparse3 = sparse1 + sparse2;      print(sparse3);  } 


0 0
原创粉丝点击