这个题目用矩阵的转置做的,找不出错了,QAQ,求助各位大佬
查看原帖
这个题目用矩阵的转置做的,找不出错了,QAQ,求助各位大佬
92833
sunshine_like_you楼主2020/10/30 16:21
#include<cstdio>
#include<iostream>
using namespace std;
int a[501][501];
void solve(int x,int y,int r,int z){ 
	
	for(int i=x-r;i<=x+r;i++){
		for(int j=y-r;j<=i;j++){
			int temp=a[i][j];
			a[i][j]=a[j][i];
			a[j][i]=temp;
		}
	}//转置该数组 
	
	if(z==0){
		for(int i=y-r;i<=y;i++){
			for(int j=x-r;j<=x+r;j++){
				int temp=a[j][i];
				a[j][i]=a[j][2*y-i];
				a[j][2*y-i]=temp;
			}
		}
	}//交换列 
	
	else{
		for(int i=x-r;i<=x;i++){
			for(int j=y-r;j<=y+r;j++){
				int temp=a[i][j];
				a[i][j]=a[2*x-i][j];
				a[2*x-i][j]=temp;
			}
		}
	}//交换行 
}
int main(){
	
	int n,m;
	int tmp=1;
	int x,y,r,z;
	
	scanf("%d%d",&n,&m);
	//填充 
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			a[i][j]=tmp;
			tmp++;
		}
	}
	//处理 
	for(int i=1;i<=m;i++){
		scanf("%d%d%d%d",&x,&y,&r,&z);
		solve(x,y,r,z);
	}
	//输出 
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++) 
          printf("%d ",a[i][j]);
		printf("\n");
	}
	return 0;
} 
2020/10/30 16:21
加载中...