幻方矩阵:
描述:
该矩阵可根据输入任意交换两行或两列。
输入格式:
第一行为两个整数n,m表示矩阵的大小为n*m;
接下来为一个n*m的矩阵;
而后一行为一个整数op,表示有op次操作;
接下来op行,每行有三个整数x,y,z。
当x=0时,交换第y行和第z行;当x=1时,交换第y列和第z列。
输出格式:
打印矩阵。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#define maxsize 101000
int change(int a[maxsize], int n, int m,int x, int y, int z)
{
int i, j, k;
if(!x)//行交换
for(i=0;i<m;i++)
{
j=a[m*y+i];
a[m*y+i]=a[m*z+i];
a[m*z+i]=j;
}
else//列交换
for(i=0;i<n;i++)
{
j=a[n*i+y];
a[n*i+y]=a[n*i+z];
a[n*i+z]=j;
}
return 0;
}
int main()
{
int n, m, op;
int x, y, z;
scanf("%d%d",&n, &m);
int i,j,k;
int a[maxsize];
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
scanf("%d",&k);
a[i*m+j]=k;
}
scanf("%d",&op);
i=0;
while(i<op)
{
i++;
scanf("%d%d%d",&x,&y,&z);
if(y!=z)
change(a,n,m,x,y-1,z-1);
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("%d",a[i*m+j]);
if(j!=m-1)
printf(" ");
}
if(i!=n-1)
printf("\n");
}
return 0;
}