スパイラルマトリクスの再帰的普及

1628 ワード

普及したM,N次元の場合,MはNに等しくなくてもよい
using System;


namespace ConsoleApplication1
{
    class Program
    {
        public static int[,] a;
        static int M=7, N=9;
        public static void print()
        {
            for (int i = 0; i < M; i++)
            {
                for (int j = 0; j < N; j++)
                    System.Console.Write("{0,5} ", a[i, j]);
                System.Console.WriteLine();
            }
        }
        static void Main(string[] args)
        {
            a=new int[M,N];
            CreateMatrix(M,N,1,0);
            print();
            System.Console.Read();
        }
        public static void CreateMatrix(int m, int n, int intValue, int circle)
        {
            if (m < 0 || n < 0) return;
            for (int i = 0; i < m; i++)
            {
                if (i == 0) for (int j = 0; j < n; j++) a[circle, circle + j] = intValue + j;
                if (i != 0 && i != m - 1) {
                    a[circle + i, circle] = intValue + 2 * n + 2 * m - 4 - i;
                    a[circle + i, circle + n - 1] = intValue + n -1+i;
                }
                if (i != 0 && i == m - 1) for (int j = 0; j < n; j++) a[circle + m - 1, circle + j ] = intValue + 2 * n + m - 2 - j-1;
            }
            CreateMatrix(m - 2, n - 2, intValue + 2 * n + 2 * m - 4, circle + 1);
        }
    }
}