Heim > Backend-Entwicklung > C++ > Hauptteil

Verwenden Sie ein C-Programm, um eine n x n-Spiralmatrix zu drucken und dabei O(1) zusätzlichen Platz zu verwenden

WBOY
Freigeben: 2023-09-06 11:53:08
nach vorne
793 Leute haben es durchsucht

Gegeben sei eine positive ganze Zahl n und konstruiere eine n x n-Spiralmatrix unter Verwendung von nur O(1) zusätzlichem Platz im Uhrzeigersinn.

Eine Spiralmatrix ist eine Matrix, die wie eine Spirale funktioniert. Sie beginnt am Ursprung des Kreises , im Uhrzeigersinn drehen. Die Aufgabe besteht also darin, die Matrix in Spiralform unter Verwendung des O(1)-Raums zu drucken, beginnend mit 2 → 4 → 6 → 8 → 10 → 12 → 14 → 1 6→ 18.

Unten ist die Beispiel-Spiralmatrix -

使用C程序打印n x n的螺旋矩阵,使用O(1)额外空间

Beispiel

Input: 3
Output:
   9 8 7
   2 1 6
   3 4 1
Nach dem Login kopieren

Es wird einfach, den Code mit unendlich viel Platz zu lösen, aber er ist nicht so effizient wie das optimale Programm, oder der Code ist sowohl im Speicher als auch in der Zeit effizient . Um die Spiralreihenfolge aufrechtzuerhalten, werden also vier Schleifen verwendet, jeweils eine für die obere, rechte, untere und linke Ecke der Matrix. Wenn wir die Matrix jedoch in zwei Teile teilen, die obere rechte und die untere linke Ecke, können wir This direkt verwenden Konzept

< p>Für die obere rechte Hälfte,

mat[i][j] = (n-2*x)*(n-2*x)-(i-x)-(j-x)
Nach dem Login kopieren

Für die untere linke Hälfte,

mat[i][j] = (n-2*x-2)*(n-2*x-2) + (i-x) + (j-x)
Nach dem Login kopieren

Hinweis-Wir schreiben ein Programm zum Drucken von Matrix-Vielfachen von. 2

Algorithmus

int spiralmatrix(int n)
START
STEP 1: DECLARE i, j, a, b, x
STEP 2: LOOP FOR i = 0 AND i < n AND i++
   LOOP FOR j = 0 AND j < n AND j++
      FIND THE MINIMUM IN (i<j ) AND ASSIGN IT TO a
      FIND THE MINIMUM (n-1-i) < (n-1-j) AND ASSIGN IT TO b
      THEN ASSIGN THE LEAST VALUE FROM a AND b TO x
      IF i <= j THEN,
         PRINT THE VALUE OF 2* ((n-2*x)*(n-2*x) - (i-x) - (j-x))
      ELSE
         PRINT THE VALUE OF 2*((n-2*x-2)*(n-2*x2) + (i-x) + (j-x))
   END LOOP
   PRINT NEWLINE
END LOOP
STOP
Nach dem Login kopieren

Beispiel

#include <stdio.h>
//For n x n spiral matrix
int spiralmatrix(int n){
   int i, j, a, b, x; // x stores the layer in which (i, j)th element exist
   for ( i = 0; i < n; i++){
      for ( j = 0; j < n; j++){
         // Finds minimum of four inputs
         a = ((i<j ? i : j));
         b = ((n-1-i) < (n-1-j) ? (n-1-i) : (n-1-j));
         x = a < b ? a : b;
         // For upper right half
         if (i <= j)
            printf("%d\t ", 2 * ((n-2*x)*(n-2*x) - (i-x) - (j-x)));
            // for lower left half
         else
            printf("%d\t ", 2*((n-2*x-2)*(n-2*x-2) + (i-x) + (j-x)));
      }
      printf("</p><p>");
   }
}
int main(int argc, char const *argv[]){
   int n = 3;
   spiralmatrix(n);
   return 0;
}
Nach dem Login kopieren

Ausgabe

Wenn wir das obige Programm ausführen, wird die folgende Ausgabe generiert:

18 16 14
4 2 12
6 8 10
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonVerwenden Sie ein C-Programm, um eine n x n-Spiralmatrix zu drucken und dabei O(1) zusätzlichen Platz zu verwenden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage