矩阵问题
看不懂啊看不懂
稀疏矩阵转换步骤: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;
}
}
}