題目描述:
給定乙個n*m的矩陣,要求支援下面的操作:
0 x y:交換第x行與第y行
1 x y:交換第x列與第y列
題目連線
input:
多組資料。對於每組測試資料,第一行包含三個數n,m,k(1<=n,m<=1000;1<=k<=100000),分別表示行數,列數,運算元。
接下來n行,每行m個整數,表示初始的矩陣,矩陣中每個數小於10^9。
接下來k行每行乙個操作,格式如題目所述。
output:
對於每組資料,輸出完成所有操作後的矩陣。
示例:
輸入:
3 2 2
1 23 4
5 60 1 3
1 1 2
輸出:
6 54 3
2 1輸出的每一行後面沒有空格。
思路:
首先想到的是輸入一組操作就交換陣列兩行或列的元素,後來果不其然,時間超限。然後仔細想想,交換行列代表什麼,不就是把輸出的順序給顛倒了嘛,輸出順序又是什麼,不就是陣列行列的編號的順序嘛。所以,我們只要對每一組運算元交換其行列的編號就可以啦。為了不引起混亂,我們重新分配兩個陣列分別表示行列編號的順序。下面上**:
#includeusing namespace std;
int a[1005][1005]; //矩陣 m x n
int r[1005]; //用來儲存行編號的順序
int c[1005]; //用來儲存列編號的順序
int i,j,m,n,k,flag,x,y,t;
int main()
for(i=1;i<=m;i++) r[i]=i; //初始化行編號
for(i=1;i<=n;i++) c[i]=i; //初始化列編號
while(k--)
else //deal with row
}//print
for(i=1;i<=m;i++)
}} }
return 0;
}
個人感悟:
學習就是不斷意識到自己以前錯了的過程。就像小學學到的東西大學也許就變成錯的了,暴力剛開始接觸程式設計時是對的,隨著學習深入就是錯誤的了。我們應當坦然,因為這是一種進步,錯了不要緊,不要繼續錯下去就對了。
矩陣交換行
問題描述 在main函式中,生成乙個5 5的矩陣,輸入矩陣資料,並輸入n,m的值。判斷n,m是否在陣列範圍內,如果不在,則輸出error 如果在範圍內,則將n行和m行交換,輸出交換n,m後的新矩陣。輸入 5 5矩陣的資料,以及n和m的值。輸出 如果不可交換,則輸出error 如果可交換,則輸出新矩陣...
矩陣交換行
給定乙個5 5的矩陣 數學上,乙個r c的矩陣是乙個由r行c列元素排列成的矩形陣列 將第n行和第m行交換,輸出交換後的結果。輸入共6行,前5行為矩陣的每一行元素,元素與元素之間以乙個空格分開。第6行包含兩個整數m n,以乙個空格分開。1 m,n 5 輸出交換之後的矩陣,矩陣的每一行元素佔一行,元素之...
矩陣交換行
描述 給定乙個5 5的矩陣 數學上,乙個r c的矩陣是乙個由r行c列元素排列成的矩形陣列 將第n行和第m行交換,輸出交換後的結果。輸入輸入共6行,前5行為矩陣的每一行元素,元素與元素之間以乙個空格分開。第6行包含兩個整數m n,以乙個空格分開。1 m,n 5 輸出輸出交換之後的矩陣,矩陣的每一行元素...