sdut 1592转置矩阵【稀疏矩阵的压缩存储】【快速转置算法】

梦想与她 提交于 2020-03-18 15:16:15

转置矩阵

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 }
View Code

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!