diaoxue 发表于 2008-3-11 00:19

矩阵转置实现的问题

输出转置后的矩阵显示的都是负的大数,帮忙看下
在vc6.0中单步的时候,用F11不能进入转置函数,
但是输出原矩阵M没问题,输出转置后的矩阵T就不行了。
//==================矩阵转置==========================
#include <iostream>
using namespace std;

const int MAXSIZE=12500;
const int MAXRC=100;
const int MAX=4;
//===================三元组===========================
typedef struct
{
    int i,j;
    int e;
}Triple;
//====================矩阵============================
typedef struct
{
    Triple data[MAXSIZE+1];
    int mu,nu,tu;
}TSMatrix;
//===================矩阵转置=========================
void TransposeSMatrix(TSMatrix M,TSMatrix & T)
{
    T.mu=M.nu;
    T.nu=M.mu;
    T.tu=M.tu;
    int q=0;
    if(T.tu)
    {
    //    int q=0;
        for(int col=1;col<=M.nu;col++)
        {
            for(int p=1;p<M.tu;p++)
            {
                if(M.data[p].j==col)
                {
                    T.data[q].i=M.data[p].j;
                    T.data[q].j=M.data[p].i;
                    T.data[q].e=M.data[p].e;
                    ++q;
                }
            }
        }
    }
    for(q=0;q<T.tu;q++)//===========不能输出T===========
    {
        cout<<T.data[q].i<<T.data[q].j<<T.data[q].e<<endl;
    }
}
//====================================================
int main()
{
    TSMatrix M,T;
    cout<<"Input mu nu tu(M)"<<endl;//输入M
    cin>>M.mu>>M.nu>>M.tu;
    cout<<"INput value of i j e(M)"<<endl;
    //for(int m=0;m<MAX;m++)
    for(int m=0;m<M.tu;m++)
    {
        cin>>M.data[m].i>>M.data[m].j>>M.data[m].e;
    }
    cout<<"The m your input is:"<<endl;
    for(m=0;m<M.tu;m++)//===========输出M矩阵正确===============
    {
        cout<<M.data[m].i<<M.data[m].j<<M.data[m].e<<endl;
    }
    cout<<"================================="<<endl;
    TransposeSMatrix(M,T);
/*    for(int q=0;q<T.tu;q++)//============error===========
    {
        cout<<T.data[q].i<<T.data[q].j<<T.data[q].e<<endl;
    }*/
    return 0;
}

diaoxue 发表于 2008-3-22 12:51

搞定了。
//==================矩阵转置==========================
#include <iostream>
using namespace std;

const int MAXSIZE=12500;
const int MAXRC=100;
const int MAX=4;
//===================三元组===========================
typedef struct
{
        int i,j;
        int e;
}Triple;
//====================矩阵============================
typedef struct
{
        Triple data[MAXSIZE+1];
        int mu,nu,tu;
}TSMatrix;

//====================构造矩阵========================
void InitTSMatrix(TSMatrix & M)
{
        cout<<"Input mu nu tu"<<endl;//输入M
        cin>>M.mu>>M.nu>>M.tu;
        cout<<"INput value of i j e(M)"<<endl;
        //for(int m=0;m<MAX;m++)
        for(int m=1;m<=M.tu;m++)
        {
                cin>>M.data[m].i>>M.data[m].j>>M.data[m].e;
        }
}

//======================显示矩阵======================
void Display(const TSMatrix M)
{
        int i=1,j=1,dir=1;
        printf("The matrix is:\n");
//        int i=1,j=1,dir=1;

        for(i=1;i<=M.mu;i++)
        {
                for(j=1;j<=M.nu;j++)
                {
                        if(M.data[dir].i==i && M.data[dir].j==j)
                        {
                                printf("%d  ",M.data[dir].e);
                                dir++;
                        }
                        else
                                printf("0  ");
                }
                printf("\n");
        }
}

//===================矩阵转置=========================
void TransposeSMatrix(TSMatrix M,TSMatrix & T)
{
        T.mu=M.nu;
        T.nu=M.mu;
        T.tu=M.tu;
        int q=1;
        if(T.tu)
        {
        //        int q=0;
                for(int col=1;col<=M.nu;col++)
                {
                        for(int p=1;p<=M.tu;p++)
                        {
                                if(M.data[p].j==col)
                                {
                                        T.data[q].i=M.data[p].j;
                                        T.data[q].j=M.data[p].i;
                                        T.data[q].e=M.data[p].e;
                                        ++q;
                                }
                        }
                }
        }
}
//====================================================
int main()
{
        TSMatrix M,T;
        InitTSMatrix(M);
        Display(M);
/*        cout<<"The m your input is:"<<endl;
        for(m=0;m<M.tu;m++)//===========输出M矩阵正确===============
        {
                cout<<M.data[m].i<<M.data[m].j<<M.data[m].e<<endl;
        }
        cout<<"================================="<<endl;*/
        TransposeSMatrix(M,T);
        Display(T);
/*        for(int q=0;q<T.tu;q++)//============error===========
        {
                cout<<T.data[q].i<<T.data[q].j<<T.data[q].e<<endl;
        }*/
        return 0;
}

页: [1]

编程论坛