稀疏矩阵压缩储存的加法运算

#include<iostream>
using namespace std;
struct Data
{
    int row,col;
    int num;
};
class Matrix
{
  private:
      int M[3][3],N[3][3];
      struct Data data1[10],data2[10];//这是一种数据类型
      int k,p;//k用来记录有多少个有效数值。
  public:
      void getdata()//我自己规定位三行三列类型,输入数值
      {
          int i,j;
          for(i=0;i<3;i++)
          {
              for(j=0;j<3;j++)
              {
                  cin>>M[i][j];
              }
          }
          for(i=0;i<3;i++)
          {
              for(j=0;j<3;j++)
              {
                  cin>>N[i][j];
              }
          }

      }
      void getnew()//遍历数值,存储有效数值
      {
          //cout<<"1"<<endl;
         int i,j;
         k=0;
         p=0;
          for(i=0;i<3;i++)
          {
              for(j=0;j<3;j++)
              {
                  if(M[i][j]!=0)
                  {
                    data1[k].row=i;
                    data1[k].col=j;
                    data1[k].num=M[i][j];
                    k++;
                  }
              }
          }
         for(i=0;i<3;i++)
          {
              for(j=0;j<3;j++)
              {
                  if(N[i][j]!=0)
                  {
                    data2[p].row=i;
                    data2[p].col=j;
                    data2[p].num=N[i][j];
                    p++;
                  }
              }
          }
      }
      void result()
      {
          int c[3][3]={0};
          for(int i=0;i<k;i++)
          {
              c[data1[i].row][data1[i].col]=data1[i].num;
          }
          for(int i=0;i<p;i++)
          {
              if(c[data2[i].row][data2[i].col]==0)c[data2[i].row][data2[i].col]=data2[i].num;
              else c[data2[i].row][data2[i].col]=c[data2[i].row][data2[i].col] + data2[i].num;
          }
          cout<<endl;
          for(int i=0;i<3;i++)
          {
              for(int j=0;j<3;j++)
              {
                  cout<<c[i][j]<<" ";
              }
              cout<<endl;
          }
      }
};
int main()
{
    Matrix a1;
    a1.getdata();
    a1.getnew();
    a1.result();
    return 0;
}

重要的注意点是两个二维数组相加是采用覆盖性的,若数组的值为空,则说明该点没值,则给它赋值。若有值则相加。

猜你喜欢

转载自blog.csdn.net/qq_40554649/article/details/80071205
今日推荐