• 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
  • 相关阅读:
    树的遍历
    动态规划之背包问题
    Dijkstra算法
    最短路径
    关于数学公式Markdown
    子集数
    O、Θ、Ω
    AT212 P-CASカードと高橋君
    vector的使用方法
    P3512 [POI2010]PIL-Pilots 单调队列的应用
  • 原文地址:https://www.cnblogs.com/kuangdaoyizhimei/p/3482617.html
Copyright © 2020-2023  润新知