2017-11-12 2 views
-1

Ich habe diesen Code, der eine Matrix um 180 Grad gegen den Uhrzeigersinn drehen soll, aber wenn die Anzahl der Zeilen & ungleichmäßig ist, bleibt die mittlere Zeile in der endgültigen Matrix unverändertDrehen einer Matrix um 180 Grad gegen den Uhrzeigersinn Probleme

for (int index1 = 0; index1 <n/2; index1++) 
     for (int index2 = 0; index2 < n; index2++) 
      swap(mat[index1][index2], mat[n - index1 - 1][n - index2 - 1]); 

Andernfalls wird der Code funktioniert für eine gerade Anzahl von Zeilen und Spalten feine

+3

Ok, also gehen Sie zurück zum Stift und Papier und sehen Sie, wo Ihr Plan fehlerhaft ist, wenn es zu einer ungeraden Anzahl von Zeilen und Spalten kommt. – PaulMcKenzie

+0

Sie würden sich einen Gefallen tun, indem Sie bessere Namen wie 'row' oder' r' anstelle von 'index1' und' column' oder 'col' oder' c' anstelle von 'index2' verwenden. Dann frag dich: * Was passiert genau, wenn du in die mittlere Reihe einer Matrix mit einer ungeraden Anzahl von Reihen kommst? * – Caleb

Antwort

0

Sie wahrscheinlich Menge von Swaps zählen möchten, so dass nach der Hälfte der Matrix getan Sie es enden kann:

for (int index1 = 0, cntSwap = 0, maxSwap = (n*m)/2; cntSwap < maxSwap; ++index1) 
    for (int index2 = 0; index2 < m && cntSwap < maxSwap; ++index2, ++cntSwap) 
     std::swap(mat[index1][index2], mat[n - index1 - 1][m - index2 - 1]); 
Verwandte Themen