ホームページ  >  記事  >  バックエンド開発  >  C プログラムを使用して、O(1) の余分なスペースを使用して n x n のスパイラル行列を出力します。

C プログラムを使用して、O(1) の余分なスペースを使用して n x n のスパイラル行列を出力します。

WBOY
WBOY転載
2023-09-06 11:53:08744ブラウズ

正の整数 n を与え、時計回りに O(1) の余分なスペースのみを使用して n x n スパイラル行列を構築します。

スパイラル行列は、スパイラルのように機能する行列です。円の原点から開始して時計回りに回転します。したがって、タスクは、2 → 4 → 6 → 8 → 10 → 12 → 14 → 1 6→ 18 から始まる O(1) 空間を使用して行列をスパイラル形式で出力することです。

以下はスパイラル行列の例です -

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

Example

Input: 3
Output:
   9 8 7
   2 1 6
   3 4 1

無限の空間を持つコードを解くのは簡単になりますが、そうではありません。 t 最適なプログラム、またはメモリと時間の両方の効率が高いコードのように効率的です。したがって、らせんの順序を維持するために、行列の上下隅に 1 つずつ、合計 4 つのループが使用されますが、行列を 2 つの部分 (右上隅と左下隅) に分割すると、これを直接使用できます。コンセプト

右上半分については、
mat[i][j] = (n-2*x)*(n-2*x)-(i-x)-(j-x)

左下半分については、

mat[i][j] = (n-2*x-2)*(n-2*x-2) + (i-x) + (j-x)

-印刷用に書いています 2行列の倍数用のプログラム

アルゴリズム

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

#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;
}

出力

上記のプログラムを実行すると、次の出力が生成されます。 -

レリー

以上がC プログラムを使用して、O(1) の余分なスペースを使用して n x n のスパイラル行列を出力します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。