用c++ 输入一个稀疏矩阵,,并转置,输出转置前后的三元组
发布网友
发布时间:2023-07-14 07:50
我来回答
共2个回答
热心网友
时间:2023-12-24 13:22
#include<iostream>
using std::cout;
using std::cin;
using std::endl;
struct node
{
int r;//行标
int c;//列标
double dat;//数据
};
class triple
{
private:
int row;//行数
int col;//列数
int num;//非零个数
node *ptr;//存放数组的首地址
public:
triple(int co,int ro,int nu):col(co),row(ro),num(nu)
{
ptr=new node[num];//分配num,盛放num个元素
cout<<"请输入"<<num<<"个三元组元素\n"<<"格式为: 2 3 6.7\n其中2为行标,3为列标,6.7为数据元素"<<endl;
for(int i=0;i<num;i++)
{
cin>>ptr[i].r;
cin>>ptr[i].c;
cin>>ptr[i].dat;
}
}
~triple(){delete[]ptr;}
void print()
{
int flag=ptr[0].r;
cout<<"第"<<flag<<"行元素为:";
for(int i=0;i<num;i++)
{
if(ptr[i].r!=flag)
{
cout<<"\n";
flag=ptr[i].r;
cout<<endl;
cout<<"第"<<flag<<"行元素为:";
}
cout<<"("<<ptr[i].r<<","<<ptr[i].c<<","<<ptr[i].dat<<") ";
}
}
void transpose()
{
int flag=0;
for(int i=1;i<=col;i++)
{
for(int j=0;j<num;j++)
{
if(ptr[j].c==i)
{
if(flag!=ptr[j].c)
{
flag=ptr[j].c;
cout<<"\n第"<<ptr[j].c<<"行为:";
}
cout<<"("<<ptr[j].c<<","<<ptr[j].r<<","<<ptr[j].dat<<") ";
}
}
}
}
};
void main()
{
cout<<"请输入数组的行列和元素个数:\n";
int a[3];
for(int i=0;i<3;i++)
{
cin>>a[i];
}
triple t(a[0],a[1],a[2]);
t.print();//输出原矩阵
cout<<"转制后的矩阵为:";
t.transpose();
}
热心网友
时间:2023-12-24 13:23
有bug。。。。。。。。。。。。。。。。。。。