您的位置:首页 > 理论基础 > 数据结构算法

数据结构 矩阵的快速转置 矩阵相乘(行逻辑连接顺序表)

2012-10-19 00:50 519 查看
快速转置

#include <iostream>
#include <string.h>
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<<b[x].e<<" ";
x++;
}else
{
cout<<"0 ";
}
}
cout<<endl;
}
return 0;
}


 

矩阵的相乘 (带行连接信息的三元组表为行逻辑链接的顺序表)

#include <iostream>
#include <stdlib.h>
#include <string.h>
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"<<endl;
cin>>n>>m;
build(a,n,m);
cout<<"请输入矩阵2"<<endl;
cin>>n>>m;
build(b,n,m);
if(a[0].col!=b[0].row)
{
cout<<"您输入错误"<<endl;
exit(0);
}
c[0].row=a[0].row; c[0].col=b[0].col;
int fp,row,col,fp2;
flag=1;
for(i=0;i<=a[0].row-1;i++)
{
memset(sum,0,sizeof(sum));
if(i<a[0].row-1)
{
fp=(a[0].deal)[i+1];
}else
{
fp=(a[0].deal)[i]+1;
}
for(j=(a[0].deal)[i];j<fp;j++)
{
col=a[j].y;
if(col<b[0].row-1)
{
fp2=(b[0].deal)[col+1];
}else
{
fp2=(b[0].deal)[col]+1;
}
for(int x=(b[0].deal)[col];x<fp2;x++)
{
sum[b[x].y]+=a[j].e*b[x].e;
}
}
for(j=0;j<=b[0].col-1;j++)
{
if(sum[j])
{
c[flag].x=i; c[flag].y=j;
c[flag++].e=sum[j];
}
}
}
t=1;
for(i=0;i<=c[0].row-1;i++)
{
for(j=0;j<=c[0].col-1;j++)
{
if(c[t].x==i&&c[t].y==j)
{
cout<<c[t].e<<" ";
t++;
}else
{
cout<<"0 ";
}
}
cout<<endl;
}
return 0;
}
void build(num *ex,int n,int m)
{
ex[0].row=n; ex[0].col=m;
int flag=1,i,j,t,s;
for(i=0;i<=n-1;i++)
{
t=0;
for(j=0;j<=m-1;j++)
{
cin>>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];
}
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 build fp c