首页 > 其他 > 详细

稀疏矩阵的转置

时间:2014-03-18 12:06:25      阅读:377      评论:0      收藏:0      [点我收藏+]

稀疏矩阵使用三元组顺序表存储表示:

bubuko.com,布布扣
#include <iostream>
using namespace std;

#define MAXSIZE 12500

typedef struct {
    int i, j;
    int e;
}Triple;

typedef struct {

    Triple data[MAXSIZE + 1];
    int rpos[MAXSIZE + 1];
    int mu, nu, tu;
}TSMatrix;

int FastTransposeSMatrix(TSMatrix M, TSMatrix &T);

int main()
{
    TSMatrix M, T;
    int k;
    cout<< "输入矩阵行数m、列数n、元素个数n:"<<endl;
    cin >> M.mu >> M.nu >> M.tu;
    cout<<"请输入矩阵M(i,j,key):"<<endl;
    for (k = 1; k <= M.tu; ++k)
        cin>>M.data[k].i>>M.data[k].j>>M.data[k].e;
    FastTransposeSMatrix(M, T);
    cout<<"转置矩阵T为:"<<endl;
    for (k = 1; k <= T.tu; ++k)
        cout<<T.data[k].i<<" "<<T.data[k].j<<" "<<T.data[k].e<<endl;
    return 0;
}

int FastTransposeSMatrix(TSMatrix M, TSMatrix &T)
{
    int col, t, p, q, *num, *cpot;
    T.mu = M.nu; T.nu = M.mu; T.tu = M.tu;
    if (T.tu) {
        num = new int[M.nu + 1];
        cpot = new int[M.nu + 1];
        for ( col = 1; col <= M.nu; ++col)
            num[col] = 0;
        for ( t = 1; t <= M.tu; ++t)
            ++num[M.data[t].j];
        cpot[1] = 1;
        for (col = 2; col <= M.nu; ++col)
            cpot[col] = cpot[col - 1] + num[col - 1];
        for (p = 1; p <= M.tu; ++p)
        {
            col = M.data[p].j;
            q = cpot[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;
            ++cpot[col];
        }
    }
    return 0;
}
bubuko.com,布布扣

稀疏矩阵的转置,布布扣,bubuko.com

稀疏矩阵的转置

原文:http://www.cnblogs.com/gjfhopeful/p/3606305.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!