关于对角矩阵压缩成一维矩阵并判断每一个矩阵内的数在一维数组中对应的下标与在对角矩阵中[行][列]下标的对应关系的讨论
include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int array[n][n];
int i,j;
// 下面就是粗暴地构建了一个矩阵
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
int transfor;
scanf("%d",&transfor);
array[i][j]=transfer;
}
}
// 构造出压缩的对角矩阵
int Linear[n*n];
int count[n];
int start[n];
int k=0;
for(i=0;i<n;i++)
count[i]=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(a[i][j]!=0)
{
Linear[k]=a[i][j];
k++;
count[i]++;
}
if(a[i][j]!=0&&a[i][j-1]0&&i<n/2)
start[i]=j;
if(a[i][j]!=0&&a[i][j+1]0)
break;
}
}
// {
// 1,2,3,0
// 0,6,7,0
// 0,10,9,0
// 0,4,5,8
// }
// 后面如果想要知道array[i][j]的具体位置可以通过对称性 公式为(假设所处的位置为k) k=count[0]+count[1]+...+count[i-1]+j-start[i]
//我们记录了每一行的一个数量count然后再记录每一行开始的一个数 就可以知道这一行前面还有多少个数那就可以得知他在一维数组中的正确位置了
//然后这个方法还可以进行一半的start数组的存储减少
//就是根据对称性的原理在计算的时候你可以把与这一行相加为n-1的另外一行的start 设置为n-1-start[i]-count[i]+1
return 0;
}
浙公网安备 33010602011771号