矩阵变换问题
描述:
给定一个
n
×
m
n×m
n×m 的矩阵,对于初始矩阵中所有值为
1
1
1 的元素,重置其所在行列的所有元素为
0
0
0,最后输出整个修改后的矩阵。
输入:
输入共包含
1
+
n
1+n
1+n行。
第一行包两个整数 n n n和 m m m, 分别表示矩阵的长和宽,题目保证 2 ≤ n , m ≤ 700 2≤n,m≤700 2≤n,m≤700 且 4 ≤ n × m ≤ 180000 4≤n×m≤180000 4≤n×m≤180000。
接下来 n n n行,每行包含 m m m个整数,第 i i i行第 j j j个整数表示矩阵中坐标 ( i , j ) (i,j) (i,j)的值 A i , j A_{i,j} Ai,j,题目保证 0 ≤ A i , j ≤ 1 e 8 0≤A_{i,j}≤1e8 0≤Ai,j≤1e8。
输出:
输出共包含
n
n
n 行,每行包含空格分隔
m
m
m 个整数。
第 i i i 行第 j j j 个整数表示修改后的矩阵中坐标 ( i , j ) (i,j) (i,j) 的值 A i , j A_{i,j} Ai,j。
请注意输出中每行行末最后一个数字后面紧跟换行符,不能包含空格。
样例输入:
3 3
3 4 5
0 1 2
6 7 8
样例输出:
3 0 5
0 0 0
6 0 8
样例输入:
3 4
1 2 3 1
4 5 6 7
8 9 10 11
样例输出:
0 0 0 0
0 5 6 0
0 9 10 0
注释:
关于测试数据:
题目保证,对于 1 / 15 1/15 1/15 的测试数据, n = 4 , m = 4 n=4,m=4 n=4,m=4;
题目保证,对于 1 / 3 1/3 1/3 的测试数据, 2 ≤ n , m ≤ 100 2≤n,m≤100 2≤n,m≤100。
题目保证,对于 2 / 3 2/3 2/3 的测试数据, 2 ≤ n ≤ 100 2≤n≤100 2≤n≤100 或 2 ≤ m ≤ 100 2≤m≤100 2≤m≤100。
C++代码实现
#include<iostream>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
int A[n][m];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++)
cin>>A[i][j];
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++)
if(A[i][j]==1){
for(int k=0;k<n;k++){
if(A[k][j]!=1)
A[k][j]=0;
}
for(int k=0;k<m;k++){
if(A[i][k]!=1)
A[i][k]=0;
}
A[i][j]=0;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m-1;j++)
cout<<A[i][j]<<" ";
cout<<A[i][m-1]<<endl;
}
}