洛谷B2099 矩阵交换行
·
原理
问题目标:给定一个5x5的矩阵和两个行号m、n,交换矩阵的第m行和第n行,并输出交换后的矩阵。
核心思路:
- 直接通过索引交换两行的所有元素。
- 使用临时数组保存其中一行的数据,避免覆盖丢失。
步骤
- 输入矩阵:读取5行,每行5个整数,构成5x5矩阵。
- 输入行号:读取要交换的行号
m和n(从1开始计数)。 - 交换行元素:
- 用临时数组保存第
m行元素。 - 将第
n行元素覆盖到第m行。 - 将临时数组中的元素覆盖到第
n行。
- 用临时数组保存第
- 输出结果:按行打印交换后的矩阵。
图示法表示步骤(示例:m=2, n=4)
- 原始矩阵:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 - 交换第2行和第4行:
- 保存第2行到临时数组:
11 12 13 14 15。 - 将第4行复制到第2行:第2行变为
21 22 23 24 25。 - 将临时数组复制到第4行:第4行变为
11 12 13 14 15。
- 保存第2行到临时数组:
- 最终矩阵:wn
1 2 3 4 5 21 22 23 24 25 11 12 13 14 15 16 17 18 19 20 6 7 8 9 10
代码关键行注释
// 定义5x5矩阵
vector<vector<int>> matrix(5, vector<int>(5,0));
// 读取矩阵输入
for(int i=0; i<5; i++){
for(int j=0; j<5; j++){
cin >> matrix[i][j];
}
}
// 输入要交换的行号m和n(从1开始)
int m, n;
cin >> m >> n;
// 交换两行:用临时数组保存第m-1行,再交换
vector<int> temp(5,0);
for(int i=0; i<5; i++){
temp[i] = matrix[m-1][i]; // 保存原第m行
matrix[m-1][i] = matrix[n-1][i]; // 第n行覆盖到第m行
matrix[n-1][i] = temp[i]; // 临时数组覆盖到第n行
}
完整代码程序
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<vector<int>> matrix(5,vector<int>(5,0));
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
cin>>matrix[i][j];
}
}
int m,n;
cin>>m>>n;
vector<int> temp(5,0);
for(int i=0;i<5;i++){
temp[i]=matrix[m-1][i];
}
for(int i=0;i<5;i++){
matrix[m-1][i]=matrix[n-1][i];
}
for(int i=0;i<5;i++){
matrix[n-1][i]=temp[i];
}
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
cout<<matrix[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
时间复杂度
- 时间复杂度:O(1),固定处理5x5矩阵,所有操作均为常数时间。
- 空间复杂度:O(1),固定使用5x5矩阵和临时数组。
总结
- 代码特点:
- 直接交换:通过遍历每列元素直接完成行交换,逻辑简单高效。
- 正确处理索引:将用户输入的1基行号转换为0基索引(
m-1和n-1)。
- 潜在优化:
- 无需优化,输入规模固定,代码已足够高效。
- 适用场景:
- 适用于矩阵行交换问题,尤其是固定规模的矩阵操作。
更多推荐



所有评论(0)