稀疏矩阵转置+快速转置代码实现

void TransposeSMatrix(TSMtrix M,TSMtrix &T)//三元组顺序表
{
    M.mu = T.nu,M.nu = T.mu,T.tu = M.tu;
    int q = 1;
    for(int col = 1;col <= M.nu;col++)
        for(int p = 1;p <= M.mu; 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++;
            }
        }
        return;
}
#include<bits/stdc++.h>
using namespace std;

#define MAX 1001
#define OK    1
#define ERROR 0
#define TURE  1
#define FALSE 0

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

typedef struct 
{
    Trimple data[MAX];
    int mu,nu,tu;
}TSMatrix;

void FastTransposeSMatrix(TSMatrix M,TSMatrix &T)
{
    T.mu = M.nu,T.nu = M.mu,T.tu = M.tu;
    if(T.tu)
    {
        int col,q,num[MAX],cpot[MAX];
        for(col = 1;col <= M.nu;col++)
            num[col] = 0;
        for(int i = 1;i <= M.tu;i++)
            num[M.data[i].j]++;
        cpot[1] = 1;
        for(int i = 2;i <= M.tu;i++)
            cpot[i] = cpot[i - 1] + num[i - 1];
        for(int p = 1;p <= M.tu;p++)
        {
            col = M.data[p].j;
            q = cpot[col];
            T.data[p].i = M.data[q].j;
            T.data[p].j = M.data[q].i;
            T.data[p].e = M.data[q].e;
            cpot[col]++;
        }
    }
    return;
}

int main()
{
    TSMatrix M;
    TSMatrix T;
    scanf("%d %d", &M.mu, &M.nu);
    int x,y,z;
    M.tu=0;
    for (int i = 0; ; i++)
    {
        scanf("%d%d%d", &x, &y, &z);
        if(x==0&&y==0&&z==0)break;
        M.data[i].i=x;M.data[i].j=y;M.data[i].e=z;
        M.tu++;
    }
 
    FastTransposeSMatrix(M, T);
 
    for (int t = 0; t < T.tu; t++)
        printf("%d %d %d\n", T.data[t].i, T.data[t].j, T.data[t].e);
    system("pause");
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
稀疏矩阵转置是指将一个稀疏矩阵按照行列互换的方式变换成另一个稀疏矩阵。下面是一个使用 C 语言实现稀疏矩阵转置代码示例: ```c #include <stdio.h> #define MAX_TERMS 101 #define MAX_COL 101 typedef struct { int row; int col; int value; } term; void fast_transpose(term a[], term b[]); int main() { term a[MAX_TERMS], b[MAX_TERMS]; int m, n, num_terms; printf("Enter the number of rows and columns in the matrix: "); scanf("%d %d", &m, &n); printf("Enter the number of non-zero elements in the matrix: "); scanf("%d", &num_terms); printf("Enter the non-zero elements of the matrix:\n"); for (int i = 0; i < num_terms; i++) { scanf("%d %d %d", &a[i].row, &a[i].col, &a[i].value); } fast_transpose(a, b); printf("The original matrix is:\n"); for (int i = 0; i < num_terms; i++) { printf("%d %d %d\n", a[i].row, a[i].col, a[i].value); } printf("The transpose matrix is:\n"); for (int i = 0; i < num_terms; i++) { printf("%d %d %d\n", b[i].row, b[i].col, b[i].value); } return 0; } void fast_transpose(term a[], term b[]) { int row_terms[MAX_COL]; int starting_pos[MAX_COL]; int num_cols = a[0].col; int num_terms = a[0].value; b[0].row = num_cols; b[0].col = a[0].row; b[0].value = num_terms; if (num_terms > 0) { for (int i = 0; i < num_cols; i++) { row_terms[i] = 0; } for (int i = 1; i <= num_terms; i++) { row_terms[a[i].col]++; } starting_pos[0] = 1; for (int i = 1; i < num_cols; i++) { starting_pos[i] = starting_pos[i-1] + row_terms[i-1]; } for (int i = 1; i <= num_terms; i++) { int j = starting_pos[a[i].col]++; b[j].row = a[i].col; b[j].col = a[i].row; b[j].value = a[i].value; } } } ``` 该程序通过定义 `term` 结构体来存储稀疏矩阵的非零元素,使用 `fast_transpose` 函数实现稀疏矩阵转置,通过读取用户输入的行数、列数和非零元素的数量,将原始稀疏矩阵存储在 `a` 数组,并将转置后的稀疏矩阵存储在 `b` 数组,最后输出原始矩阵转置后的矩阵

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值