首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

矩阵有关问题

2012-03-30 
矩阵问题看不懂啊看不懂稀疏矩阵转换步骤:1 将矩阵的行列值转换2 交换每个三元组的i和j相互调换3 重排三元

矩阵问题
看不懂啊看不懂

稀疏矩阵转换步骤:1 将矩阵的行列值转换
  2 交换每个三元组的i和j相互调换
  3 重排三元组之间的次序 //没有懂为什么要这么做??

 typedef struct{
  int i,j;
  int e;
 }triple;
 
 typedef struct{
  triple data[max];
  int mu,nu,tu; //矩阵行,列,非零个数。
}TSM

bool TRANS (TSM M,TSM &T)
{
  T.mu=M.mu; T.nu=M.nu; T.tu=M.tu;
  if(T.tu)
  q=1;
  for(col=1;col<=M.nu;++col)
  {
  for(p=1;p<=M.tu;++p)
  {
  if(M.data[p].j==col) //这个也不懂做了什么,最好也能解释下循环怎么做的??
  {
  交换每个三元组
  ++q;
  }
  }
  }
  return ok;
}







[解决办法]
我也是这学期才学的这个数据结构,前一段时间才学完数组和矩阵,所以有不恰当的地方还请多多包涵啊。
col用来控制矩阵M的列,从矩阵M的第一列开始,即col==1,用p来控制循环遍历M中的数据的所在的列,M.data[p].j==col是指当前数据所在的列为循环所确定的列,即col所代表的列。第一次循环,col=1,先找到M第一列的数据元素,用p遍历M,当M.data[p].j==col时代表M中当前的元素所在的列为第一列时,将其逐一交换到T中的第一行,直到将M中第一列的数全部转置到T的第一行,当col=2时,循环将M第二列的数依次转置到T的第二行,直至完成全部转换。
for(col=1;col<=M.nu;++col) //控制M中当前要转置到新矩阵的列,从第一列开始
{
for(p=1;p<=M.tu;++p) //遍历M
{
if(M.data[p].j==col) //寻找第col列的数据
{
交换每个三元组 逐一转置到T的第一行
++q;
}

}
 

热点排行