2013-12-13 120 views
1

我在嘗試按列更改行時遇到了一些麻煩。交換C++中的列的行

我想要的是改變靜態二維數組(3x3)的行和列。我不想只打印帶有反向索引的數組。我試圖在int aux中存儲數組中實際位置的值,但沒有效果。

輸入:

1 2 3 
4 5 6 
7 8 9 

輸出:

1 4 7 
2 5 8 
3 6 9 

利用該代碼,結果是相同的2D陣列。我看不出問題,你能幫我嗎?

#include <iostream> 

using namespace std; 

int main() 
{ 
    int vec[3][3]; 
    int x, y, aux; 
//Input 
    for(x=0; x<3;x++) 
{ 
    for(y=0; y<3;y++) 
    { 
    cout << "POSITION ["<<x+1<<"]["<<y+1<<"]: "; 
    cin >> vec[x][y]; 
    } 
} 

    cout<<"\nPress ENTER..."; 
    cin.ignore(); 
    cin.get(); 
    system("CLS"); 
//Array before the change 
cout<<"ARRAY A"<<endl; 
for(x=0; x<3;x++) 
{ 
    for(y=0; y<3;y++) 
    { 
    cout<<vec[x][y]<<"\t"; 
    } 
cout << "\n"; 
} 
//Change 
for(x=0; x<3;x++) 
{ 
    for(y=0; y<3;y++) 
    { 
     if(x!=y) 
     { 
      aux=vec[x][y]; 
      vec[x][y]=vec[y][x]; 
      vec[y][x]=aux; 
     } 
    } 
} 

//Array after the change 
cout<<"\nARRAY A"<<endl; 
for(x=0; x<3;x++) 
{ 
    for(y=0; y<3;y++) 
    { 
    cout<<vec[x][y]<<"\t"; 
    } 
cout << "\n"; 
} 
cout << "\n"; 
system("PAUSE"); 
return 0; 
} 
+0

這種操作稱爲「矩陣轉置」;如果你搜索這個短語,你會發現一些相關的討論。 – IvyMike

+0

聽起來像是[BLAS](http://www.netlib.org/blas/)或[CBLAS](https://www.gnu.org/software/gsl/manual/html_node/GSL-CBLAS)的操作-Library.html) – Mgetz

回答

4

您正在交換兩次元素。因此他們回到原來的地方。

變化

if(x!=y) 

if(x < y) 

如果元素是說,(2,3),所以只能換。如果它是(3,2),那麼它已經交換了,我們不應該再次交換它。

1

所有你真正需要做的是交換。在一個3x3矩陣的情況下,它只是交換左下角和右上角的元素:

const int SIZE = 3; 
for (int i = 0; i < SIZE; ++i) 
{ 
    for (int j = 0; j < SIZE; ++j) 
    { 
     if (i < j) 
     { 
      swap(vec[i][j], vec[j][i]); 
     } 
    } 
} 

請注意,我們停止j從遍歷整個向量。這是因爲如果我們迭代了整個向量,它會將它們交換回原來的位置。

1

如下所示,您切換兩次。迭代最少數量的時候,最聰明的變化是改變你的第二個for循環:

for (y = 0; y < 3; y++) 

for (y = 0; y < x; y++) 
0
int N = M-1; // M is end bound for MxM matrix, only work for Mxm matrix. 
int index1 = 1; 
for (index0 = 0; index0 < N; index0++) // loop through row 
{ 
    for(index1; index1 < M; index1++) //swapping about the diagn line. 
    { 
     tempN = minorMatrix[index0][index1]; 
     minorMatrix[index0][index1] = minorMatrix[index1][index0]; 
     minorMatrix[index1][index0] = tempN; 
    } 
    index1++; // number of swapping reduce by one after each row. 
} 
+1

更正,它的MxM而不是Mxn,對於Mxn矩陣,它需要更復雜的方法。 – user6598258