c++ 分别通过普通转置和快速转置实现矩阵转置并用三元组表表示

运行分别通过普通转置和快速转置转置后的打印的两个矩阵显示的是一些奇怪的数字。

img


```c++
#include <iostream>
using namespace std;
int print(int a[][3]);
//普通转置
void normaltranspose(int a[][3],int b[][3])
{
    int a_row,b_row,a_col,b_col,a_zero,b_zero;
    a_row=a[0][0];
    a_col=a[0][1];
    a_zero=a[0][2];
    b[0][0]=a_col;
    b[0][1]=a_row;
    b[0][2]=a_zero;
    for(int i=0;i<a_col;i++)
    {
        int q=0;
        for(int j=1;j<=a_zero;j++)
        {
            if(a[j][1]==i)
            {
                b[q][0]==a[j][1];
                b[q][1]==a[j][0];
                b[q][2]==a[j][2];
                q++;
            }
        }
    }
    print(b);
}
//快速转置
void transpose(int a[][3],int b[][3])
{
    int a_row,b_row,a_col,b_col,a_zero,b_zero;
    a_row=a[0][0];
    a_col=a[0][1];
    a_zero=a[0][2];
    b[0][0]=a_col;
    b[0][1]=a_row;
    b[0][2]=a_zero;
    int *x=new int[a_col];
    int *y=new int[a_col];
    for(int i=0;i<a_col;i++) x[i]=0;
    for(int i=1;i<=a_zero;i++) x[a[1][i]]++;
    y[0]=0;
    for(int i=1;i<=a_col;i++) y[i]=y[i-1]+x[i-1];
    for(int i=1;i<=a_zero;i++)
    {
        int j=y[a[1][i]];
        b[j][2]=a[i][2];
        b[j][0]=a[i][1];
        b[j][1]=a[i][0];
        y[a[1][i]]++;
    }
    print(b);
}

int print(int a[][3])
{
    for(int i=0;i<8;i++)
    {
        for(int j=0;j<3;j++)
        {
            cout<<a[i][j]<<" ";
        }
        cout<<endl;
    }
}

int main()
{
    int aSM[8][3]={{5,4,7},{0,0,12},{0,1,15},{2,0,36},
                  {2,1,46},{2,3,52},{4,1,72},{4,3,68}};
    int bSM[8][3];
    cout<<"原三元组表为:"<<endl;
    print(aSM);
    cout<<"普通转置后的三元组表为:"<<endl;
    normaltranspose(aSM,bSM);
    cout<<"快速转置后的三元组表为:"<<endl;
    transpose(aSM,bSM);
}


```