稀疏矩阵如何转置?c++版

原矩阵——>压缩成3元组(可以用二维数组表示这个3元组)——>3元组的行列交换,其实是前面二维数组的第一列与第二列的交换——>交换后的矩阵第一列进行排序

#include<iostream>

using namespace std;
const int ROW=3;
const int COL=4;
void print(int *,int len,int col );
void reduce(int a[ROW][COL]);
void change(int a[][3]);


void main()
{
int a[ROW][COL]=
{
{3,0,0,0},
{0,0,4,0},
{8,0,0,6}


};
int *p=&a[0][0];
cout<<"原数组为\n\n";
 print(p,12,4);
reduce(a);


}
void print(int * p,int len,int col)
{
   for(int i=0;i<len;i++)
  
   {
  cout<<*p++<<' ';
  if((i+1)%col==0)
  cout<<endl;
   }
}
void reduce(int a[][COL])

int cut[4][3];
int m=0;
  
  for(int i=0;i<ROW;i++)
  for(int j=0;j<COL;j++)  
   {
  while(a[i][j]!=0)
  {
   cut[m][0]=i;
        cut[m][1]=j;
cut[m][2]=a[i][j];
m++;
break;
  }
   }
 
  int *q=&cut[0][0];
  cout<<"压缩数组为\n\n";
  print(q,12,3);
  change(cut);
}
void change(int a[][3])
{
for(int m=0;m<4;m++)
{
 int tempp= a[m][0];
     a[m][0]=a[m][1];
a[m][1]=tempp;


}


cout<<"转置数组为(未排序)\n\n";
int *w=&a[0][0];
print(w,12,3);






//冒泡排序
for(int i=0;i<4;i++)
 for(int j=i;j<4-i-1;j++)
 { 
   if(a[j][0]>a[j+1][0])
{
int t=a[j][0];
   a[j][0]=a[j+1][0];
a[j+1][0]=t;
 
int temp=a[j][1];
   a[j][1]=a[j+1][1];
a[j+1][1]=temp;



int tt=a[j][2];
   a[j][2]=a[j+1][2];
a[j+1][2]=tt;

}
 
 
 }   
int *q=&a[0][0];
cout<<"转置数组为\n\n";
print(q,12,3);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值