C ++-如何仅使用向量将稀疏矩阵转换为密集矩阵

时间:2018-12-15 14:53:20

标签: c++ matrix sparse-matrix

这是我到目前为止所做的:

#include <iostream>
#include <cmath>
#include <vector>
using namespace std;

struct Matrix {
   vector<vector<double> > store;
   int nr;
   int nc;
};

struct SparseEntry {
   int r, c;
   double val;
   SparseEntry *next;
};

struct SparceMatrix {
   SparseEntry *store;
   int nr, nc, nnz;
};

bool iszero(double val);
Matrix matrix(const vector<double> &v, const int nr, const int nc);
void printFullMatrix(const Matrix &m);

int main() {  
   double val;
   cout << "Insert the element in position r, c: " << endl;
   cin >> val;
   iszero(val);
   vector<double> v;
   Matrix emme;
   int nr=8; 
   int nc=5;
   emme=matrix(v, nr, nc);

   printFullMatrix(emme);
   return 0;
}

bool iszero(double val) {
    static const int tolerance = 1e-12;
    return (fabs(val)<tolerance);
}

Matrix matrix(const vector<double> &v, const int nr, const int nc) { 
    Matrix m;
    m.nr=nr;
    m.nc=nc;
    cout << nr << nc;
    m.store.resize(nr); 
    for (int r=0; r<nr; ++r) {
    m.store[r].resize(nc);
    for(int c=0; c<(nc-1); ++c)
    {
        m.store[r][c]=c;
        cout << m.store[r][c];
    }
    cout << endl;
}
for (int r=0; r<(nr-1); ++r) {
    for (int c=0; c<(nc-1); ++c) {
        if(v.at(c+r*nc)!=0) {   
            m.store[r][c]=v.at(c+r*nc); 
        }
        else {
            m.store[r][c]=0;
        }
    }
}
return m;
}

void printFullMatrix(const Matrix &m) {
    for(int r=0; r<(m.nr-1); ++r) {
        for(int c=0; c<(m.nc-1); ++c) {
            cout << m.store[r][c];
        }
        cout << endl;
    }
}

我需要编写一个函数,将密集矩阵转换为密集矩阵,而另一个函数仅使用向量就恰好相反。 对于第一个,我想到的是SparseMatrix sparse(const Matrix&m);。 第二个是Matrix full(const SparseMatrix&s)。 有人会这么善良地解释转换背后的思想过程吗?预先谢谢你。

0 个答案:

没有答案