#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 12500
int a[1000][1000],num[12500],cpot[12500];
typedef struct{
int i,j,e;
}Triple;
typedef struct{
Triple data[MAXSIZE];
int mu,nu,tu;//row,col,value;
}TSMatrix;
void InitArray(int m, int n){
printf("please input the Array:\n");
for(int i = 0; i < m; i ++)
for(int j = 0; j < n; j ++)
scanf("%d",&a[i][j]);
}
void Memory(TSMatrix &T, int m, int n){
int i = 0, j = 0;
T.tu = 0; T.mu = m; T.nu = n;
for(i = 0; i < m; i ++){
for(j = 0; j < n; j ++){
if(a[i][j]){
T.data[T.tu].i = i; T.data[T.tu].j = j; T.data[T.tu].e = a[i][j];
T.tu ++;
}
}
}
}
void TransposeSMatrix(TSMatrix T, TSMatrix &S){
int i,col,p;
cpot[0] = 0; S.tu = T.tu;
for(i = 0; i < T.tu; i++)
num[T.data[i].j] ++;
for(i = 1; i < T.nu; i ++)
cpot[i] = cpot[i - 1] + num[i - 1];
for(i = 0; i < T.tu; i ++){
col = T.data[i].j; p = cpot[col];
S.data[p].i = T.data[i].j; S.data[p].j = T.data[i].i; S.data[p].e = T.data[i].e;
cpot[col] ++;
}
}
void Output(TSMatrix S){
printf("row col value\n");
for(int i = 0; i < S.tu; i ++)
printf("%d %d %d\n",S.data[i].i,S.data[i].j,S.data[i].e);
}
int main(){
TSMatrix T,S;
int m,n;
printf("please input the col and row:\n");
scanf("%d%d",&m,&n);
InitArray(m,n);
Memory(T,m,n);
TransposeSMatrix(T,S);
Output(S);
return 0;
}
矩阵的快速转置
最新推荐文章于 2025-02-06 00:15:00 发布