当前位置: 首页 » 源码资讯 » 建站教程 » 正文

矩阵转置(不使用数组)

放大字体  缩小字体 发布日期:2019-08-26  来源:程序源码  作者:蜘蛛池  浏览次数:859

标签:优先displaycolitem使用方式widthsrcwhile

题目描述

输入一个N*N的矩阵,将其转置后输出。要求:不得使用任何数组(就地逆置)。

输入描述:
输入的第一行包括一个整数N,(1lt;=Nlt;=100),代表矩阵的维数。接下来的N行每行有N个整数,分别代表矩阵的元素。你感觉此页面对你有用,想留你的信息那么联系客服吧!输出描述:
可能有多组测试数据,对于每组数据,将输入的矩阵转置后输出。你感觉此页面对你有用,想留你的信息那么联系客服吧!

示例1

输入

31 2 34 5 67 8 9你感觉此页面对你有用,想留你的信息那么联系客服吧!

输出

1 4 72 5 83 6 9你感觉此页面对你有用,想留你的信息那么联系客服吧!解决问题思路:

解决矩阵转置一般借助数组保存原矩阵或转置后的矩阵,通过将aij与aji互换或将aij输入到另一个矩阵的aji完成转置。现题目要求不借助矩阵,那么我们可以使用链表以行优先方式存储原矩阵,这样我们只需寻找链表中aij与aji之间的位置关系,互换即可完成转置。

对称线上的a00 a11 ......aN-1N-1不需要转置,只需将第一行的a01a02a03 ......a0N-1,第二行的a12a13......a1N-1 ,第三行......依此类推,即只需将矩阵右上部分与左下半部分互换。

链表存储矩阵形式如下:

以右上部分为主体考虑,那么jgt;i。

在链表中aij 的下标为i*N+j,aji的下标为j*N+i。

aij = i*N+j

aji = j*N+i

aji ndash; aij = (j-i)*N+i-j = (j-i)*(N-1),此为链表中aij与aji的位置差。

记 j - i 为m,那么第一行m的值从1递增到N-1,第二行m的值从1递增到N-2,依次递推。有了这个位置关系,那么互换就可以实现了。

实现代码如下:
#includelt;stdio.hgt;#includelt;stdlib.hgt;int main(void){    int N,i,j,temp,m;    while(scanf("%d",amp;N)!=EOF){        int *a=(int*)malloc(sizeof(int)*N*N);        for(i=0;ilt;N*N;i++){            scanf("%d", amp;a[i]);        }        for(i=0;ilt;N;i++){            for(j=i*N+i+1,m=1;jlt;N*Namp;amp;mlt;N-i;j++,m++){                temp=a[j];                a[j]=a[j+m*(N-1)];                a[j+m*(N-1)]=temp;            }        }        for(i=0;ilt;N;i++){            for(j=0;jlt;N-1;j++){                printf("%d ",a[i*N+j]);            }            printf("%dn",a[i*N+j]);        }        free(a);    }    return 0;}你感觉此页面对你有用,想留你的信息那么联系客服吧!

你感觉此页面对你有用,想留你的信息那么联系客服吧!

矩阵转置(不使用数组)

标签:优先displaycolitem使用方式widthsrcwhile

原标题:矩阵转置(不使用数组)原文链接:http://www.wangguangli.cn/information/show-17712.html
本站信息部分来源互联网,如发现侵权信息请出示相关证件【联系我们】,我们将第一时间处理!
 
 
[ 源码资讯搜索 ]  [ 加入收藏 ]  [ 告诉好友 ]  [ 打印本文 ]  [ 违规举报 ]  [ 关闭窗口 ]

 

 
推荐图文
推荐源码资讯
点击排行