#include<iostream>
#include<stdlib.h>
using namespace std;
#define MAXSIZE 12500
typedef struct{
int i,j;
int e;
}Triple;
typedef struct{
Triple data[MAXSIZE+1];
int hang,lie,geshu;
}TS;
void CreatTS(TS &T)
{
cout<<"请输入矩阵的行数"<<endl;
cin>>T.hang;
cout<<"请输入矩阵的列数"<<endl;
cin>>T.lie;
cout<<"请输入矩阵的非零元个数"<<endl;
cin>>T.geshu;
for(int a=1;a<=T.geshu;a++)
{
cout<<"请输入该非零元的行下标"<<endl;
cin>>T.data[a].i;
cout<<"请输入该非零元的列下标"<<endl;
cin>>T.data[a].j;
cout<<"请输入该非零元的值"<<endl;
cin>>T.data[a].e;
}
}
int Destroy(TS &T)
{
if(T.geshu==0) return 0;
T.geshu=0;
T.hang=0;
T.lie=0;
cout<<"矩阵已销毁"<<endl;
}
int xianshi(TS &T)
{
if(T.geshu==0)
{
cout<<"矩阵不存在"<<endl; return 0;
}
int c=1;
for(int a=1;a<=T.hang;a++)
{
cout<<endl;
cout<<endl;
cout<<" ";
for(int b=1;b<=T.lie;b++)
{
if(b==T.data[c].j&&a==T.data[c].i)
{
cout<<T.data[c].e<<" ";
c++;
}
else
cout<<"0"<<" ";
}
cout<<endl;
}
}
int zhuanzhi(TS &M,TS T)
{
int q,p;
M.geshu=T.geshu;
M.hang=T.lie;
M.lie=T.hang;
if(T.geshu){
q=1;
for(int col=1;col<=T.lie;col++)
{
for(p=1;p<=T.geshu;p++)
{
if(T.data[p].j==col)
{
M.data[q].i=T.data[p].j;
M.data[q].j=T.data[p].i;
M.data[q].e=T.data[p].e;
q++;
}
}
}
}
}
int kuaisu(TS &M,TS T)
{
M.geshu=T.geshu;
M.hang=T.lie;
M.lie=T.hang;
int geshu[100];
int weizhi[100];
int k,q,t;
for(t=1;t<=T.lie;t++) geshu[t]=0;
for(t=1;t<=T.geshu;t++) ++geshu[T.data[t].j];
weizhi[1]=1;
for(t=2;t<=T.lie;t++) weizhi[t]=weizhi[t-1]+geshu[t-1];
for(k=1;k<=T.geshu;k++)
{
t=T.data[k].j; q=weizhi[t];
M.data[q].i=T.data[k].j;
M.data[q].j=T.data[k].i;
M.data[q].e=T.data[k].e;
++weizhi[t];
}
}
int show()
{
cout<<"***********************************************"<<endl;
cout<<"************** 1.创建矩阵 **************"<<endl;
cout<<"************** 2.销毁矩阵 **************"<<endl;
cout<<"************** 3.输出矩阵M **************"<<endl;
cout<<"************** 4.转置矩阵 **************"<<endl;
cout<<"************** 5.快速转置矩阵 **************"<<endl;
cout<<"************** 6.退出 **************"<<endl;
cout<<"***********************************************"<<endl;
}
int main()
{
int n;
show();
TS T;
TS M;
int flag=0;
while(1)
{
cout<<"请输入你要进行的操作"<<endl;
cin>>n;
if(n==1)
CreatTS(T);
if(n==2)
Destroy(T);
if(n==3)
{
if(flag==0)
xianshi(T);
if(flag==1)
xianshi(M);
if(flag==2)
xianshi(M);
}
if(n==4)
{
zhuanzhi(M,T);
flag=1;
}
if(n==5)
{
kuaisu(M,T);
flag=2;
}
if(n==6)
break;
}
}