数据结构 矩阵的快速转置 矩阵相乘(行逻辑连接顺序表)
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]; } }
相关文章推荐
- 数据结构-矩阵快速转置
- 稀疏矩阵的行逻辑连接顺序表实现
- 【数据结构】稀疏结构及稀疏矩阵的压缩存储,矩阵的(快速)转置
- 数据结构----稀疏矩阵的快速转置
- 数据结构25:矩阵转置算法(三元组顺序表)
- 数据结构--数组和广义表--以三元组顺序表存储方式的矩阵的一般转置和快速转置
- 【数据结构】稀疏结构及稀疏矩阵的压缩存储,矩阵的(快速)转置
- 【数据结构之旅】稀疏矩阵的快速转置
- 数据结构学习记录-矩阵的快速转置
- 数据结构----稀疏矩阵的快速转置
- 稀疏矩阵的列序递增法和一次定位快速转置法
- 矩阵快速转置
- 数据结构--稀疏矩阵(转置)
- 数据结构:稀疏矩阵的三元组顺序表
- 稀疏矩阵的压缩储存,稀疏矩阵的普通转置,稀疏矩阵的快速转置
- 稀疏矩阵快速转置
- 数据结构_稀疏矩阵转置(trans_sparse_matrix)
- c语言数据结构——三元数组的快速转置
- 数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法
- 稀疏矩阵一次定位快速转置算法