转置矩阵
Time Limit: 1000ms Memory limit: 32768K 有疑问?点这里^_^
题目链接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1592
题目描述
把矩阵A的行换成相应的列,得到的新矩阵称为A的转置矩阵,记作A'或A。
给你一个矩阵,求它的转置矩阵。
输入
输入数据的第一行是两个正整数R和C(1<=R,C<=10),分别代表矩阵的行数和列数。接下来R行,每行C个空格隔开的整数。
输出
输出转置后的矩阵,每行中相邻的两个数用空格隔开。
示例输入
3 3 1 2 3 4 5 6 7 8 9
示例输出
1 4 7 2 5 8 3 6 9
提示
代码:

1 #include<iostream>
2 #include<string.h>
3 #include<string>
4 using namespace std;
5 struct vode
6 {
7 int i,j;
8 int date;
9 };
10 struct node
11 {
12 int mu,nu,tu;
13 struct vode data[1000];
14 };
15 struct node M,T;
16 void zhuanzhi();
17 int main()
18 {
19 M.tu=0;
20 T.tu=0;
21 cin>>M.mu>>M.nu;
22 int i,j,k;
23 for(i=1; i<=M.mu; i++)
24 for(j=1; j<=M.nu; j++)
25 {
26 int temp;
27 cin>>temp;
28 //if(temp!=0)//修改此处可以筛选掉date值为0的数
29 {
30 M.data[++M.tu].date=temp;
31 M.data[M.tu].i=i;
32 M.data[M.tu].j=j;
33 }
34 }
35 zhuanzhi();
36 for(i=1;i<=T.tu;i++)
37 {
38 if(i%T.nu==0)
39 {
40 cout<<T.data[i].date<<endl;
41 }
42 else
43 cout<<T.data[i].date<<" ";
44 }
45 return 0;
46 }
47 void zhuanzhi()//快速转置算法
48 {
49 int col,p,t,q;
50 T.tu=M.tu;
51 T.mu=M.nu;
52 T.nu=M.mu;
53 int cpot[1000]={0},num[1000]={0};
54 if(T.tu)
55 {
56 for(col=1;col<=M.nu;col++)
57 num[col]=0;
58 for(t=1;t<=M.tu;++t)
59 ++num[M.data[t].j];
60 cpot[1]=1;
61 for(col=2;col<=M.nu;col++)
62 cpot[col]=cpot[col-1]+num[col-1];
63 for(p=1;p<=M.tu;p++)
64 {
65 col=M.data[p].j;
66 q=cpot[col];
67 T.data[q].i=M.data[p].j;
68 T.data[q].j=M.data[p].i;
69 T.data[q].date=M.data[p].date;
70 ++cpot[col];
71 }
72 }
73 }
来源:https://www.cnblogs.com/kuangdaoyizhimei/p/3482617.html
