সম্পূর্ণ ম্যাট্রিক্সকে k সংখ্যায় ঘোরাতে হবে। একটি ম্যাট্রিক্সে n*n ম্যাট্রিক্সে মোট n/2 স্কোয়ার থাকে এবং আমরা নেস্টেড লুপ ব্যবহার করে প্রতিটি বর্গকে একবারে প্রসেস করতে পারি। প্রতিটি বর্গক্ষেত্রে, উপাদানগুলি 4টি উপাদানের একটি চক্রে চলে তারপর আমরা প্রতিটি চক্রের জন্য একটি ক্লকওয়াইজ দিক থেকে জড়িত উপাদানগুলিকে অদলবদল করি৷
অবস্থানে থাকা উপাদান (n-1-j,i) অবস্থানে যাবে (i,j)
অবস্থানে থাকা উপাদান (i,j) অবস্থানে যাবে (j,n-1-i)
অবস্থানে থাকা উপাদান (j,n-1-i) অবস্থানে যাবে (n-1-i,n-1-j)
অবস্থানে থাকা উপাদান (n-1-i,n-1-j) অবস্থানে যাবে (n-1-j,i)
উদাহরণ
using System;
using System.Text;
namespace ConsoleApplication{
public class Matrix{
public void RotateMatrixByKTimes(int[,] matrix, int numberOftimes){
int n = matrix.GetLength(0);
for (int k = 0; k < numberOftimes; k++){
for (int i = 0; i < n / 2; i++){
for (int j = i; j < n - i - 1; j++){
int top = matrix[i, j];
//MOve left to top
matrix[i, j] = matrix[n - 1 - j, i];
//Move bottom to left
matrix[n - 1 - j, i] = matrix[n - i - 1, n - 1 - j];
//Move right to bottom
matrix[n - i - 1, n - 1 - j] = matrix[j, n - i - 1];
//Move top to right
matrix[j, n - i - 1] = top;
}
}
}
for (int i = 0; i < n; i++){
StringBuilder s = new StringBuilder();
for (int j = 0; j < n; j++){
s.Append(matrix[i, j] + " ");
}
Console.WriteLine(s);
s = null;
}
}
}
class Program{
static void Main(string[] args){
Matrix m = new Matrix();
int[,] matrix = { { 5, 1, 9, 11 }, { 2, 4, 8, 10 }, { 13, 3, 6, 7 }, { 15, 14, 12, 16 } };
m.RotateMatrixByKTimes(matrix, 2);
}
}
} আউটপুট
16 12 14 15 7 6 3 13 10 8 4 2 11 9 1 5