数组与广义表代码(Cyu'yan):均为栈溢出,求解

幻方矩阵:

描述:

该矩阵可根据输入任意交换两行或两列。

输入格式:

第一行为两个整数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;
}

图片说明

// Q1062692.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"


#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[m*i+y];
            a[m*i+y]=a[m*i+z];
            a[m*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;
}