快速转置
#include
#include
using namespace std;
class num
{
public:
int x,y;
int e;
int row,col;
}a[100000],b[100000];
int sum[100000],deal[1000000];
int main()
{
int i,j,n,m,s,t,flag;
int flag2;
cin>>n>>m;
a[0].row=n; a[0].col=m;
flag=1;
for(i=0;i<=n-1;i++)
{
for(j=0;j<=m-1;j++)
{
cin>>s;
if(s)
{
a[flag].x=i;
a[flag].y=j;
a[flag++].e=s;
}
}
}
b[0].row=m; b[0].col=n;
memset(sum,0,sizeof(sum));
for(i=1;i<=flag-1;i++)
{
sum[a[i].y]++;
}
deal[0]=1;
for(i=1;i<=m-1;i++)
{
deal[i]=deal[i-1]+sum[i-1];
}
for(i=1;i<=flag-1;i++)
{
flag2=deal[a[i].y];
b[flag2].x=a[i].y; b[flag2].y=a[i].x;
b[flag2].e=a[i].e;
deal[a[i].y]++;
}
int x=1;
for(i=0;i<=b[0].row-1;i++)
{
for(j=0;j<=b[0].col-1;j++)
{
if(i==b[x].x&&j==b[x].y)
{
cout<
矩阵的相乘 (带行连接信息的三元组表为行逻辑链接的顺序表)
#include
#include
#include
using namespace std;
class num
{
public:
int x,y;
int e;
int sum[10000],row,col,deal[10000];
}a[1000],b[1000],c[1000];
int sum[1000];
int main()
{
void build(num *ex,int n,int m);
int i,j,n,m,s,t,flag;
cout<<"请输入矩阵1"<>n>>m;
build(a,n,m);
cout<<"请输入矩阵2"<>n>>m;
build(b,n,m);
if(a[0].col!=b[0].row)
{
cout<<"您输入错误"<>s;
if(s)
{
t++;
ex[flag].x=i; ex[flag].y=j;
ex[flag++].e=s;
}
}
ex[0].sum[i]=t;
}
ex[0].deal[0]=1;
for(i=1;i<=n-1;i++)
{
(ex[0].deal)[i]=(ex[0].deal)[i-1]+(ex[0].sum)[i-1];
}
}