永发信息网

【稀疏矩阵】稀疏矩阵和三元组的问题假设nxn的稀疏矩阵A采用三元....

答案:2  悬赏:0  手机版
解决时间 2021-02-06 08:33
  • 提问者网友:愿为果
  • 2021-02-05 13:49
【稀疏矩阵】稀疏矩阵和三元组的问题假设nxn的稀疏矩阵A采用三元....
最佳答案
  • 五星知识达人网友:走死在岁月里
  • 2021-02-05 15:27
【答案】 #include
  #include
  #define OK 1
  #define ERROR 0
  #define MAXSIZE 100 //最多非0元素的个数
  #define MAXR 50 //rpos所能处理的最大行数
  #define MAXC 50 //系数矩阵相乘时,保留临时列结果的数组temp[MAXC]
  typedef struct NODE{ //定义稀疏矩阵结点
  int i;
  int j;
  int data;
  } Node;
  typedef struct MATRIX{ //定义稀疏矩阵(可以快速访问)
  int mu,nu,tu;
  Node matrix[MAXSIZE+1];
  int rpos[MAXR+1];
  } Matrix;
  int CreatSMatrix( Matrix* M ); //创建一个矩阵(由用户输入原始矩阵,转化为稀疏矩阵方式储存)
  int AddSMatrix( Matrix M,Matrix N,Matrix *Q); //两个稀疏矩阵相加
  int Print( Matrix M ); //打印一个稀疏矩阵
  int Mul_SMatrix( Matrix M,Matrix N,Matrix *Q); //两个稀疏矩阵相乘
  main()
  {
  Matrix A1,A2,A3; //定义矩阵
  CreatSMatrix( &A1 );
  CreatSMatrix( &A2 );
  if( A1.mu==A2.mu && A1.nu==A2.nu ){ //判断能否相加
  AddSMatrix( A1,A2,&A3 );
  printf(两矩阵相加得:\n);
  Print(A3);
  }
  else
  printf(规模不一致,不能相加!\n);
  if( A1.nu==A2.mu ){ //判断能否相乘
  Mul_SMatrix( A1,A2,&A3 );
  printf(两矩阵相乘得:\n);
  Print(A3);
  }
  system(pause);
  return 0;
  }
  //构建稀疏矩阵
  int CreatSMatrix( Matrix* M )
  {
  int temp,i,j;
  printf(输入矩阵的行列数:);
  scanf(%d%d,&M->mu,&M->nu);
  M->tu=0;
  printf(按行序输入矩阵:\n);
  for( i=1; imu; i++){
  M->rpos[i]=M->tu+1; //每计算完一行,给rpos[]赋值
  for( j=1; jnu; j++){
  scanf(%d,&temp );
  if( temp ){ //非0值保存
  M->matrix[M->tu+1].i= i;
  M->matrix[M->tu+1].j= j;
  M->matrix[M->tu+1].data=temp;
  M->tu++;
  }
  }
  }
  return OK;
  }
  //两矩阵相加
  int AddSMatrix( Matrix M,Matrix N,Matrix *Q)
  {
  int arow,Mcol,Ncol,i=1;
  int Mlim,Nlim;
  Q->tu=0; //给Q赋初值
  Q->mu=M.mu;
  Q->nu=M.nu;
  for( arow=1; arowrpos[arow] = Q->tu+1;
  //确定第i行的j在M、N矩阵中的范围
  Mlim = arowtu++;
  }
  else i--; //相加为0,i自减(保持i不变)
  Mcol++;
  Ncol++;
  }
  else{ //谁的j小,把谁存入Q
  if(M.matrix[Mcol].j matrix[i].i = M.matrix[Mcol].i;
  Q->matrix[i].j = M.matrix[Mcol].j;
  Q->matrix[i].data = M.matrix[Mcol].data;
  Q->tu++;
  Mcol++;
  }
  else{
  Q->matrix[i].i = N.matrix[Ncol].i;
  Q->matrix[i].j = N.matrix[Ncol].j;
  Q->matrix[i].data = N.matrix[Ncol].data;
  Q->tu++;
  Ncol++;
  }
  }//else
  }//for
  if( Mcolmatrix[i].j = M.matrix[Mcol].j;
  Q->matrix[i].data = M.matrix[Mcol].data;
  Q->tu++;
  Mcol++;
  }
  }
  if( Ncolmatrix[i].j = N.matrix[Ncol].j;
  Q->matrix[i].data = N.matrix[Ncol].data;
  Q->tu++;
  Ncol++;
  }
  }
  }//for
  return 1;
  }
  //打印稀疏矩阵
  int Print( Matrix M)
  {
  int i;
  if(M.tu==0){
  printf(空矩阵\n\n);
  return ERROR;
  }
  printf(i\tj\tdata\n);
  for( i=1; itu=0;//初始化Q
  Q->mu=M.mu;
  Q->nu=M.nu;
  if(M.tu*N.tu!=0){ //非零矩阵
  for(arow=1; arowtu+1; //给Q->rpos[]数组赋值
  Mlim = arowtu].i = arow;
  Q->matrix[Q->tu].j = i;
  Q->matrix[Q->tu].data = ctemp[i];
  }
  }
  }
  }
  return 1;
  }
全部回答
  • 1楼网友:渊鱼
  • 2021-02-05 15:45
这个问题我还想问问老师呢
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯