复件 快速矩阵转置法及其实现.cpp

来自「用c实现进制转换」· C++ 代码 · 共 69 行

CPP
69
字号
#include"stdio.h"
#define MAXSIZE 12500

typedef struct {
	int i,j;
	char e;
}Triple;
typedef struct{
	Triple data[MAXSIZE];
	int mu,nu,tu;
}TSMatrix; 


int fasttransposeSMatrix(TSMatrix M,TSMatrix &T)
{
	int col,t,copt[50],p,q,num[10];
	T.mu=M.nu;T.nu=M.nu;T.tu=M.tu;
	if(T.nu)
	{
		for(col=1;col<=M.nu;col++)num[col]=0;
		for(t=1;t<=M.tu;t++)++num[M.data[t].j];
		copt[1]=1;
		for(col=2;col<=M.nu;col++)copt[col]=copt[col-1]+num[col-1];
		for(p=1;p<=M.tu;p++)
		{	
			col=M.data[p].j;q=copt[col];
            T.data[q].i=M.data[p].j;T.data[q].j=M.data[p].i;
            T.data[q].e=M.data[p].e;++copt[col];
		}
	}
	return 0;
}


void main()
{
    int k,l,n;
	TSMatrix t,m;
	t.mu=4;t.nu=5;t.tu=5;
	t.data[1].e=4;
	t.data[1].i=1;
	t.data[1].j=2;
    t.data[2].e=3;
	t.data[2].i=1;
	t.data[2].j=4;
	t.data[3].e=-7;
	t.data[3].i=2;
	t.data[3].j=5;
	t.data[4].e=2;
	t.data[4].i=3;
	t.data[4].j=1;
	t.data[5].e=5;
	t.data[5].i=4;
	t.data[5].j=3;
	fasttransposeSMatrix(t,m);
    for(k=1;k<=5;k++)
	{
		for(l=1;l<=4;l++)
		{
			for(n=1;n<=m.tu;n++)
				if(m.data[n].i==k&&m.data[n].j==l)break;
		if(n<=m.tu)printf("%-5d",m.data[n].e);
        else printf("%-5d",0);
		}
		putchar('\n');
	}

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?