永发信息网

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

答案:2  悬赏:0  手机版
解决时间 2021-02-06 08:33
【稀疏矩阵】稀疏矩阵和三元组的问题假设nxn的稀疏矩阵A采用三元....
最佳答案
【答案】 #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;
  }
全部回答
这个问题我还想问问老师呢
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
天贵氧吧量贩KTV地址好找么,我有些事要过去
用其他方法说明三角形的内角和是180度
脚骨拐的意思是什么啊?知道的请说下!
我在佰仟金融贷款2600元买手机,分期付款24期
求ps3游戏《湾岸午夜》日版下载地址,多玩和
唱响天地量贩式KTV怎么去啊,我要去那办事
青岛蚊子很毒吗?
一个长方体的表面积是1.6平方米,底面积是周
宏碁笔记本中的onedrive怎么卸载?
和老同学见面该怎么办,想把她拿下来
韩蒸天下汗蒸减肥养生石疗馆(诺德店)地址在哪
信了的意思是什么啊?知道的请说下!
体育锻炼的构成要素
定压喇叭变压器输入 有1.7K欧 3.3K欧 6.7K欧
对每一类性行为问题的严重程度,依据自我体验
推荐资讯
香兰阁养生馆(东门路)地址在什么地方,我要处
新爱米皮我想知道这个在什么地方
董家营在什么地方啊,我要过去处理事情
佳源美容美发怎么去啊,我要去那办事
如何防止皮包的五金件变色?为什么会变色?
隐形近视眼睛会显得眼睛变小还是变大?
户县明天限号是多少限号的路线划分
特百惠超市在什么地方啊,我要过去处理事情
问道飞廉变异宠物怎么可以得到?
推荐一款55寸能当电脑显示器的液晶电视,没买
惠山区环境保护局前洲分局地址在什么地方,我
贵妃养生会所地址好找么,我有些事要过去
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?