スパイラルマトリクスの再帰的普及
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);
}
}
}