求助5,8,9对的,测试过来都对的,不是行列问题
查看原帖
求助5,8,9对的,测试过来都对的,不是行列问题
1495898
Sisyphu_s楼主2024/10/28 12:39
#include<stdio.h>
int abs(int n){
    if(n<0)n=-n;
    return n;
}
void ck(int f[][501],int n){
    int i,k=1;
    for(i=1;i<=n;i++){
        int j;
        for(j=1;j<=n;j++){
            f[i][j]=k++;
        }
    }
}
void zhuan(int x,int y,int r,int k,int f[][501],int z[][501]){
    //整数x,y,r,z,以第x行第y 列为中心的2r+1 阶矩阵按照某种时针方向旋转,其中z=0 表示顺时针,z=1 表示逆时针。
    
    int i;
    for(i=x-r;i<=x+r;i++){
        int j;
        for(j=y-r;j<=y+r;j++){
            z[i][j]=f[i][j];
        }
    }
    if(k==0){
        for(i=x-r;i<=x+r;i++){
            int j;
            for(j=y-r;j<=y+r;j++){
                f[i][j]=z[x+r-abs(j-(y-r))][y-r+abs(i-(x-r))];     //相对位置y-r起始y
            }
        }
    }
    if(k==1){
        for(i=x-r;i<=x+r;i++){
            int j;
            for(j=y-r;j<=y+r;j++){
                f[i][j]=z[x-r+abs(j-(y-r))][y+r-abs(i-(x-r))];
            }
        }
    }
}
int main(){
    int n,m;
    scanf("%d %d",&n,&m);
    int f[501][501],z[501][501],in[500][4];
    int i;
    for(i=0;i<m;i++){

        scanf("%d %d %d %d",&in[i][0],&in[i][1],&in[i][2],&in[i][3]);
        }
                 //in  每行 4 个整数x,y,r,z,以第x行第y 列为中心的2r+1 阶矩阵按照某种时针方向旋转,其中z=0 表示顺时针,z=1 表示逆时针。
    ck(f,n);

    for(i=0;i<n;i++){
        int j;
        zhuan(in[i][0],in[i][1],in[i][2],in[i][3],f,z);
    }

    for(i=1;i<=n;i++){
        int j;
        for(j=1;j<=n;j++){
            printf("%d",f[i][j]);
            if(j!=n){
                printf(" ");
            }
        }
        if(i!=n)
        printf("\n");
    }


return 0;}
2024/10/28 12:39
加载中...