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

转置矩阵

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

 

你可能感兴趣的:(算法)