当前位置:编程学习 > C/C++ >>

矩阵转置算法二

这个算法比较快的原因是提前存贮了所有转置后的第一个非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++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,