/*
稀疏矩阵的转秩
*/
#include<iostream>
using namespace std;
//矩阵的行数,列数,非零元素的个数
int matrix_r;
int matrix_c;
int matrix_num;
int matrix[1000][3]={{0,3,22},{0,6,15},{1,1,11},{1,5,17},{2,3,-6},{3,5,39},{4,0,91},{5,2,28}};
//上限为1000个元素,二维矩阵保存稀疏矩阵中的值
int new_matrix[1000][3];
int rowSize[1000];
int rowStart[1000];
int main(){
//给出测试元素
matrix_r = 6;
matrix_c = 7;
matrix_num = 8;
//初始化
for(int i=0;i<matrix_c;i++){
rowSize[i] = 0;
}
//根据列的值预处理出转秩后每行中元素的个数以及行第一个元素所在的位置
rowStart[0] = 0;
for(int i=0;i<matrix_num;i++){
rowSize[matrix[i][1]]++;
}
for(int i=1;i<matrix_c;i++){
rowStart[i] = rowStart[i-1] + rowSize[i-1];
}
for(int i=0;i<matrix_num;i++){
int j = rowStart[matrix[i][1]];
new_matrix[j][0] = matrix[i][1];
new_matrix[j][1] = matrix[i][0];
new_matrix[j][2] = matrix[i][2];
rowStart[matrix[i][1]]++;
}
for(int i=0;i<matrix_num;i++){
for(int j=0;j<3;j++){
cout<<" "<<new_matrix[i][j];
}
cout<<endl;
}
return 0;
}
稀疏矩阵快速转秩
最新推荐文章于 2024-04-05 23:58:19 发布