矩阵转置算法二
这个算法比较快的原因是提前存贮了所有转置后的第一个非0元素所在的位置,存储的时候可以直接对号放入,所以比n*m的要快。关键是看怎么存储的。#include<iostream> #include<bitset> #include<algorithm> #include<string> #include<vector> #include<string.h> #include<math.h> #include<cstring> using namespace std; #define maxsize 2000 struct triple{ int x,y,data; }; struct matrix{ triple ko[maxsize]; int hang,lie,total; }; int num[maxsize],pos[maxsize]; int main() { matrix N,M; int i; while(cin>>N.hang>>N.lie>>N.total) { if(N.total==0) break; for(i=1;i<=N.lie;i++) num[i]=0; for(i=1;i<=N.total;i++) { cin>>N.ko[i].x>>N.ko[i].y>>N.ko[i].data; num[N.ko[i].y]+=1; } cout<<endl; pos[1]=1; for(i=2;i<=N.lie;i++) pos[i]=pos[i-1]+num[i-1]; for(i=1;i<=N.total;i++) { int col=N.ko[i].y; int q=pos[col]; M.ko[q].data=N.ko[i].data; M.ko[q].x=N.ko[i].y; M.ko[q].y=N.ko[i].x; pos[col]=pos[col]+1; } M.hang=N.lie; M.lie=N.hang; M.total=N.total; for(i=1;i<=M.total;i++) cout<<M.ko[i].x<<" "<<M.ko[i].y<<" "<<M.ko[i].data<<endl; } return 0; }
补充:软件开发 , C++ ,