Để xoay ma trận theo thứ tự xoắn ốc, chúng ta cần làm như sau cho đến khi tất cả ma trận bên trong và ma trận bên ngoài được bao phủ -
-
Bước 1 - Di chuyển các phần tử của hàng trên cùng
-
Bước 2 - Di chuyển các phần tử của cột cuối cùng
-
Bước 3 - Di chuyển các phần tử của hàng dưới cùng
-
Bước 4 - Di chuyển các phần tử của cột đầu tiên
-
Bước 5 - Lặp lại các bước trên cho vòng trong khi có ma trận bên trong
Ví dụ
using System; namespace ConsoleApplication{ public class Matrix{ public void PrintMatrixInSpiralOrder(int m, int n, int[,] a){ int i, k = 0, l = 0; while (k < m && l < n){ for (i = l; i < n; ++i){ Console.Write(a[k, i] + " "); } k++; for (i = k; i < m; ++i){ Console.Write(a[i, n - 1] + " "); } n--; if (k < m){ for (i = n - 1; i >= l; --i){ Console.Write(a[m - 1, i] + " "); } m--; } if (l < n){ for (i = m - 1; i >= k; --i){ Console.Write(a[i, l] + " "); } l++; } } } } class Program{ static void Main(string[] args){ Matrix m = new Matrix(); int R = 3; int C = 6; int[,] aa = { { 1, 2, 3, 4, 5, 6 }, { 7, 8, 9, 10, 11, 12 }, { 13, 14, 15, 16, 17, 18 } }; m.PrintMatrixInSpiralOrder(R, C, aa); } } }
Đầu ra
1 2 3 4 5 6 12 18 17 16 15 14 13 7 8 9 10 11