稀疏矩阵转置和乘法操作

                                       稀疏矩阵转置和乘法操作

 

一.稀疏矩阵转置

第一行输入一个矩阵的行数m列数n非零元个数t.

接下来t行输入每个非零元的三元组。

样例输入

5 5 4

1 3 5

1 4 8

2 1 8

2 3 7

样例输出

1 2 8

3 1 5

3 2 7

4 1 8

代码:

#include
using namespace std;
typedef struct
{
    int row,col,ele;
}node1;
int k=0,p=0,flag=0,e=0;
typedef struct
{
    int tm,tn,tu;
    node1 data[100];
}node2;
int main()
{
    int k=0;
    node2 a,b;
    cout<<"请输入矩阵的行列非零元个数:";
    cin>>a.tm>>a.tn>>a.tu;
    b.tm=a.tn;
    b.tn=a.tm;
    b.tu=a.tu;
    cout<<"请输入矩阵的非零元组:"<>a.data[i].row>>a.data[i].col>>a.data[i].ele;
    for(int i=1;i<=a.tn;i++)
        for(int j=0;j

二.稀疏矩阵乘法

输入一个矩阵的行数m1列数n1非零元个数t1.

接下来t行输入每个非零元的三元组。

输入一个矩阵的行数m2列数n2非零元个数t2.

接下来t2行输入每个非零元的三元组。

样例输入

4 3 4

1 3 1

2 1 2

2 3 3

3 2 2 

3 4 4

1 1 1

1 3 1

3 1 3

4 2 1

样例输出

1 1 3

2 1 11

2 3 2

关系式:

c[i][j]=\sum a[i][k]*b[k][j];  k从1到矩阵的列数。

找到第一个矩阵列与第二个矩阵行相同,进行该位置数值相乘,最后注意合并相同位置的数。

代码:

#include
using namespace std;
typedef struct
{
    int row,col,ele;
}node1;
int k=0,p=0,flag=0,e=0;
typedef struct
{
    int tm,tn,tu;
    node1 data[100];
}node2;
int main()
{
    node2 a,b,c;
    cout<<"输入矩阵a的行数列数非零元数:";
    cin>>a.tm>>a.tn>>a.tu;
    cout<<"输入矩阵a三元表:"<>a.data[i].row>>a.data[i].col>>a.data[i].ele;
    } cout<<"输入矩阵b的行数列数非零元数:";
    cin>>b.tm>>b.tn>>b.tu;
    cout<<"输入矩阵b三元表:"<>b.data[i].row>>b.data[i].col>>b.data[i].ele;
    }
    c.tm=a.tm;
    c.tn=b.tn;
    if(a.tn!=b.tm)
        cout<

 

你可能感兴趣的:(稀疏矩阵转置和乘法操作)