zoukankan      html  css  js  c++  java
  • 稀疏矩阵的转置

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

    #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;
    }
  • 相关阅读:
    2019 ICPC Universidad Nacional de Colombia Programming Contest
    AcWing
    模板
    AcWing
    AcWing
    AcWing
    模板
    模板
    自考新教材-p340
    自考新教材-p339
  • 原文地址:https://www.cnblogs.com/gjfhopeful/p/3606305.html
Copyright © 2011-2022 走看看