稀疏矩阵(三元组存储方法)数据结构

img


实现稀疏矩阵的转置运算,这个错误怎么改,想了半天,总是不正确。
会的帮忙看下,非常感谢!

img


看我的代码


#include<iostream>
#define maxsize 10000
using namespace std;
struct triple
{
    int row,col;
    int e;
};
struct matrix
{
    triple data[maxsize+1];
    int r,c,len;
};
int main()
{
    //1.原矩阵的输入 
    matrix lsy;
    cin>>lsy.r>>lsy.c;
    int data,flag=1;
    for(int i=0;i<lsy.r;i++)
    {
        for(int j=0;j<lsy.c;j++)
        {
            cin>>data;
            if(data!=0)
            {
                lsy.data[flag].row=i+1;
                lsy.data[flag].col=j+1;
                lsy.data[flag].e=data;
                lsy.len=flag;
                flag++;
            }
        }
    }
    //2.开始转置 
    matrix lsy2;
    lsy2.r=lsy.c;
    lsy2.c=lsy.r;
    lsy2.len=lsy.len;
    if(lsy2.len>0)
    {
        int flag2=1;//辅助计数器,记录转置后的元素在三元组表B中的下标值 
        for(int i=1;i<=lsy.c;i++)//扫描原矩阵的三元组表共c次,每次寻找列值为i的三元组进行转置 
        {
            for(int j=1;j<=lsy.len;j++)//从头至尾扫描三元组表lsy,寻找col值为i都三元组进行转置 
            {
                if(lsy.data[j].col==i)
                {
                    lsy2.data[flag2].row=lsy.data[j].col;
                    lsy2.data[flag2].col=lsy.data[j].row;
                    lsy2.data[flag2].e=lsy.data[j].e;
                    flag2++;//计数器+1,指向本行下一个转置后元素的位置下标 
                }
            }
        }
    }
    //3.输出转置后的矩阵 
    int flag3=1;
    for(int i=0;i<lsy.c;i++)
    {
        for(int j=0;j<lsy.r;j++)
        {
            if(lsy2.data[flag3].row==i+1&&lsy2.data[flag3].col==j+1)
            {
                cout<<lsy2.data[flag3].e<<' ';
                flag3++;
            }
            else
            cout<<"0"<<' ';
        }
        cout<<endl;
    }
    return 0;
}