zoukankan      html  css  js  c++  java
  • 实验四 稀疏矩阵的转置及应用

    对如图的稀疏矩阵,分别利用方法一和方法二进行转置,并将转置后的矩阵输出(忽略单元格的颜色信息)

    三元组转置法

    #include<stdlib.h>
    #include<stdio.h>
    typedef struct stu
    {
        int row;
        int col;
        int num;
    }JD;
    
    int transform(JD ma[],JD mb[]) 
    {
        int col,p,n,t,k;
       if(ma[0].num==0)
        return(0);
       n=ma[0].col;
       mb[0].row=n; 
       mb[0].col=ma[0].row; 
       mb[0].num=ma[0].num;
       t=ma[0].num;
       k=1;    
       for(int i=1;i<=n;i++)
          for(p=1;p<=t;p++)
             if(ma[p].col==i)
             {  mb[k].row=ma[p].col;
                 mb[k].col=ma[p].row;
                 mb[k].num=ma[p].num;
                 k++;
              }
       return(1);
    }
    int main()
    {
        JD S1[50],S2[50];
        int a[20][20],b[20][20],m,n,l=1;
        printf("请输入要转置矩阵的大小:\n");
        scanf("%d%d",&m,&n);
        printf("请输入要转置的矩阵:\n");
        for(int i=0;i<m;i++)
        for(int j=0;j<n;j++)
        {
            scanf("%d",&a[i][j]);
        }
        for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
        {
            b[i][j]=0;
         } 
        S1[0].row=m;
        S1[0].col=n;
        for(int i=0;i<m;i++)
        for(int j=0;j<n;j++)
        {
            if(a[i][j]!=0)
            {
                S1[l].row=i+1;
                S1[l].col=j+1;
                S1[l].num=a[i][j];
                l++;
            }    
        }
        S1[0].num=l-1;
        printf("转化成三元组为:\n");
        for(int i=0;i<l;i++)
        printf("%d %d %d\n",S1[i].row,S1[i].col,S1[i].num);
    
        for(int i=0;i<l;i++)
        {
        S2[i].row=0;
        S2[i].col=0;
        S2[i].num=0;}
            if(transform(S1,S2)!=1)
        {
            printf("转置失败!");
        }
        printf("转置后的三元组为:\n");
        for(int i=0;i<l;i++)
        printf("%d %d %d\n",S2[i].row,S2[i].col,S2[i].num);
        for(int i=1;i<l;i++)
        {
            b[S2[i].row-1][S2[i].col-1]=S2[i].num;
        }
        printf("转置后的矩阵为:\n");
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                printf("%d ",b[i][j]);
            }
        printf("\n");
        }
    }

    快速转置法

    #include<stdlib.h>
    #include<stdio.h>
    typedef struct stu
    {
        int row;
        int col;
        int num;
    }JD;
    
    int transform(JD ma[],JD mb[]) 
    {
        int i,j,k,l,m,n;
        if(ma[0].num==0)
        {
            return 0;
        }
        else
        {
            mb[0].row=ma[0].col;
            mb[0].col=ma[0].row;
            mb[0].num=ma[0].num;
            n=ma[0].col;
            m=ma[0].num;
            l=1;
            for(i=1;i<=n;i++)
                for(j=1;j<=m;j++)
                    if(ma[j].col==i)
                    {
                        mb[l].row=ma[j].col;
                        mb[l].col=ma[j].row;
                           mb[l].num=ma[j].num;
                        l++;
                    }
            return 1;
        }
    }
    int main()
    {
        JD S1[50],S2[50];
        int a[20][20],b[20][20],m,n,l=1;
        printf("请输入要转置矩阵的大小:\n");
        scanf("%d%d",&m,&n);
        printf("请输入要转置的矩阵:\n");
        for(int i=0;i<m;i++)
        for(int j=0;j<n;j++)
        {
            scanf("%d",&a[i][j]);
        }
        for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
        {
            b[i][j]=0;
         } 
        S1[0].row=m;
        S1[0].col=n;
        for(int i=0;i<m;i++)
        for(int j=0;j<n;j++)
        {
            if(a[i][j]!=0)
            {
                S1[l].row=i+1;
                S1[l].col=j+1;
                S1[l].num=a[i][j];
                l++;
            }    
        }
        S1[0].num=l-1;
        printf("转化成三元组为:\n");
        for(int i=0;i<l;i++)
        printf("%d %d %d\n",S1[i].row,S1[i].col,S1[i].num);
    
        for(int i=0;i<l;i++)
        {
        S2[i].row=0;
        S2[i].col=0;
        S2[i].num=0;}
            if(transform(S1,S2)!=1)
        {
            printf("转置失败!");
        }
        printf("转置后的三元组为:\n");
        for(int i=0;i<l;i++)
        printf("%d %d %d\n",S2[i].row,S2[i].col,S2[i].num);
        for(int i=1;i<l;i++)
        {
            b[S2[i].row-1][S2[i].col-1]=S2[i].num;
        }
        printf("转置后的矩阵为:\n");
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                printf("%d ",b[i][j]);
            }
        printf("\n");
        }
    }
  • 相关阅读:
    ASP扫盲学习班第六课 添加新保存的数据
    三级联动菜单免刷新加载
    ASP按定制格式导出word文件的完美解决思路
    通用客户资源管理系统(客户资料保护库)
    SmR 通用信息采集系统(新闻小偷)
    ASP扫盲学习班第三课 程序界面的设计
    我的新作品(单身贵族网全站)
    《将博客搬至CSDN》
    我的新作品
    asp函数大全
  • 原文地址:https://www.cnblogs.com/accept/p/8175880.html
Copyright © 2011-2022 走看看