更好的交换

思路

问题最后希望通过有限的整行整列操作得到一个新的矩阵,而这个新的矩阵也只是数字的顺序不一样。
进行行变换不会影响到每一列有哪些数字,同样进行列变换不会影响行中有哪些数字,只是可能会影响某一行中数字出现的顺序。
既然行变换不会影响到每一列有哪些问题,列变换不会影响到每一行有哪些元素,那么就可以给每一列、每一行编号,一个行编号与一列编号就可以确定唯一的一个数值,则可以用这些编号代表某一行或者某一列。然后只交换这些编号,最终通过这些编号来看需要先输出哪一行哪一列。最终得到目标矩阵

代码

#include<iostream>
using namespace std;

int main(){
    int n,m,op,x,y;
    cin>>n>>m;
    int arr[n][n];
    int l[n],c[n];
    for(int i=0;i<n;++i){
        l[i]=c[i]=i;
        for(int j=0;j<n;++j){
            cin>>arr[i][j];
        }
    }
    for(int i=0;i<m;++i){
        cin>>op>>x>>y;
        if(op==0){//交换列
            swap(l[x-1],l[y-1]);
        }else if(op==1){//交换行
            swap(c[x-1],c[y-1]);
        }
    }
    for(int i=0;i<n;++i){
        for(int j=0;j<n;++j){
            cout<<arr[c[i]][l[j]];
            if(j!=n-1) cout<<' ';
        }cout<<endl;
    }
    return 0;
}
posted @ 2025-01-23 15:21  Buy-iPhone  阅读(9)  评论(0)    收藏  举报