矩阵转置算法二
这个算法比较快的原因是提前存贮了所有转置后的第一个非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 2000struct 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;}