@题目
稀疏矩阵A用三元组表示,编写一个函数,计算机A的转置矩阵B,并且也用三元组储存B
函数
//遍历三元组A,找列号为1的元素
void transpose(int A[][3], int B[][3])
{
int column;//列优先
B[0][0]=A[0][0];
B[0][1]=A[0][2];
B[0][2]=A[0][1];
if(A[0][0]>1)//如果A[][3]不空
{
int k=0;//记录构造B中元素个数
for(int i=0;i<A[0][2];++i)//扫描A中第一列,第二列。。。。。
{
for(int j=1;j<=A[0][0];++j)
{
if(i==A[j][2])//如果三元组A中某元素的列数等于i
{
++k;
B[k][0]=A[j][0];
B[k][1]=A[j][2];
B[k][2]=A[j][1];
}
}
}
}
}
完整测试程序
#include<iostream>
using namespace std;
//遍历三元组A,找列号为1的元素
void transpose(int A[][3], int B[][3])
{
int column;//列优先
B[0][0]=A[0][0];
B[0][1]=A[0][2];
B[0][2]=A[0][1];
if(A[0][0]>1)//如果A[][3]不空
{
int k=0;//记录构造B中元素个数
for(int i=0;i<A[0][2];++i)//扫描A中第一列,第二列。。。。。
{
for(int j=1;j<=A[0][0];++j)
{
if(i==A[j][2])//如果三元组A中某元素的列数等于i
{
++k;
B[k][0]=A[j][0];
B[k][1]=A[j][2];
B[k][2]=A[j][1];
}
}
}
}
}
int main()
{
int mat[][4]={{0,1,2,3},{0,0,1,0},{1,2,0,0}};
int A[100][3],k=0,B[100][3];
for(int i=0;i<3;++i)
{
for(int j=0;j<4;++j)
{
if(mat[i][j]!=0)
{
++k;
A[k][0]=mat[i][j];
A[k][1]=i;
A[k][2]=j;
}
}
}
A[0][0]=k;
A[0][1]=3;
A[0][2]=4;
transpose(A,B);
for(int i=0;i<7;++i)
{
for(int j=0;j<3;++j)
{
cout<<A[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;
for(int i=0;i<7;++i)
{
for(int j=0;j<3;++j)
{
cout<<B[i][j]<<" ";
}
cout<<endl;
}
return 0;
}