2次元配列の回転
2 次元配列を、時計回り、反時計回りに回転させるプログラムです。
実行例です。
時計回りに回転 0 1 2 3 4 5 3 0 4 1 5 2 5 4 3 2 1 0 2 5 1 4 0 3 反時計回りに回転 0 1 2 3 4 5 2 5 1 4 0 3 5 4 3 2 1 0 3 0 4 1 5 2
プログラム
using System; using System.Collections.Generic; using System.Linq; class Program { static int[,] RotateClockwise(int[,] g) { // 引数の2次元配列 g を時計回りに回転させたものを返す int rows = g.GetLength(0); int cols = g.GetLength(1); var t = new int[cols, rows]; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { t[j, rows-i-1] = g[i, j]; } } return t; } static int[,] RotateAnticlockwise(int[,] g) { // 引数の2次元配列 g を反時計回りに回転させたものを返す int rows = g.GetLength(0); int cols = g.GetLength(1); var t = new int[cols, rows]; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { t[cols-j-1, i] = g[i, j]; } } return t; } static void Display(int[,] g) { int rows = g.GetLength(0); int cols = g.GetLength(1); for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { if (j > 0) Console.Write(' '); Console.Write(g[i, j]); } Console.WriteLine(); } Console.WriteLine(); } static void Main() { int[,] g = { { 0, 1, 2 }, { 3, 4, 5 }, }; var t = g; Console.WriteLine("時計回りに回転"); for (int i = 0; i < 4; i++) { Display(t); t = RotateClockwise(t); } t = g; Console.WriteLine("反時計回りに回転"); for (int i = 0; i < 4; i++) { Display(t); t = RotateAnticlockwise(t); } } }