เราได้รับอาร์เรย์ 2 มิติที่จะใช้เพื่อสร้างรูปแบบเมทริกซ์ ภารกิจคือการหมุนเมทริกซ์ 90 องศาในทิศทางทวนเข็มนาฬิกาเพื่อให้แถวแรกกลายเป็นคอลัมน์แรก แถวที่สองกลายเป็นคอลัมน์ที่สอง และที่สามกลายเป็นคอลัมน์ที่สาม และความท้าทายคือเราไม่จำเป็นต้องใช้พิเศษ ช่องว่าง
ให้เราดูสถานการณ์อินพุตเอาต์พุตที่หลากหลายสำหรับสิ่งนี้ -
ป้อนข้อมูล −
int arr[row_col_size][row_col_size] = { { 5, 1, 4}, { 9, 16, 12 }, { 2, 8, 9}}
ผลผลิต −
Rotation of a matrix by 90 degree without using any extra space is: 4 12 9 1 16 8 5 9 2
คำอธิบาย − เราได้รับอาร์เรย์ 2 มิติของประเภทจำนวนเต็ม ตอนนี้เราจะหมุนเมทริกซ์ 90 องศาในทิศทางตามเข็มนาฬิกา
Before rotation-: { { 5, 1, 4}, { 9, 16, 12 }, { 2, 8, 9}} After rotation-: 2 12 9 1 16 8 5 9 2
ป้อนข้อมูล −
int arr[row_col_size][row_col_size] = { { 2, 1, 9}, { 11, 6, 32 }, { 3, 7, 5}}
ผลผลิต −
Rotation of a matrix by 90 degree in clockwise direction without using any extra space is: 9 32 5 1 6 7 2 7 3
คำอธิบาย − เราได้รับอาร์เรย์ 2 มิติของประเภทจำนวนเต็ม ตอนนี้เราจะหมุนเมทริกซ์ 90 องศาในทิศทางตามเข็มนาฬิกา
Before rotation-: { { 2, 1, 9}, { 11, 6, 32 }, { 3, 7, 5}} After rotation-: 9 32 5 1 6 7 2 7 3
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
1. วิธีการไร้เดียงสา
-
ป้อนอาร์เรย์จำนวนเต็ม 2 มิติที่จะถือว่าเป็นเมทริกซ์ที่มี row_col_size
-
ส่งข้อมูลไปยังฟังก์ชัน Rotate_ClockWise(arr)
-
ภายในฟังก์ชัน Rotate_ClockWise(arr)
-
เริ่มวนซ้ำ FOR จาก i ถึง 0 จนถึง i น้อยกว่า row_col_size/2.
-
ภายในลูป เริ่มวนใหม่ FOR จาก j ถึง 0 ถึง j น้อยกว่า row_col_size - i - 1
-
ภายในลูป ตั้งค่า ptr เป็น arr[i][j], arr[i][j] เป็น arr[row_col_size - 1 - j][i], arr[row_col_size - 1 - j][i] เป็น arr[row_col_size - 1 - i][row_col_size - 1 - j], arr[row_col_size - 1 - i][row_col_size - 1 - j] ถึง arr[j][row_col_size - 1 - i] and arr[j][row_col_size - 1 - i] ถึง ptr.
-
-
เริ่มวนซ้ำ FOR จาก i ถึง 0 จนถึง i น้อยกว่า row_col_size ภายในลูป เริ่มลูปอื่น FOR จาก j ถึง 0 จนถึง j น้อยกว่า row_col_size; j++ และพิมพ์ arr[i][j].
2. แนวทางที่มีประสิทธิภาพ
-
ป้อนอาร์เรย์จำนวนเต็ม 2 มิติที่จะถือว่าเป็นเมทริกซ์ที่มี row_col_size
-
ส่งข้อมูลไปยังฟังก์ชัน Rotate_ClockWise(arr)
-
ภายในฟังก์ชัน Rotate_ClockWise(arr)
-
เริ่มวนซ้ำ FOR จาก i ถึง 0 จนถึง i น้อยกว่า row_col_size
-
ภายในลูป เริ่มวนใหม่ FOR จาก j ถึง 0 ถึง j น้อยกว่า row_col_size - i.
-
ภายในลูป ตั้งค่า ptr เป็น arr[i][j], arr[i][j] เป็น arr[row_col_size - 1 - j]arr[row_col_size - 1 - i] และ [row_col_size - 1 - j] เป็น arr[ j][row_col_size - 1 - i] ถึง ptr.
-
เริ่มวนรอบ FOR จาก i ถึง 0 จนถึง i น้อยกว่า row_col_size / 2 ภายในลูป ให้เริ่มลูปอื่น FOR จาก j ถึง 0 ถึง j น้อยกว่า row_col_size ภายในลูป ตั้งค่า ptr เป็น arr[i][j], arr[i][j] เป็น arr[row_col_size - 1 - i][j] และ arr[row_col_size - 1 - i][j] ถึง ptrพี>
-
-
เริ่มวนซ้ำ FOR จาก i ถึง 0 จนถึง i น้อยกว่า row_col_size ภายในลูป เริ่มลูปอื่น FOR จาก j ถึง 0 จนถึง j น้อยกว่า row_col_size; j++ และพิมพ์ arr[i][j].
แนวทางที่ไร้เดียงสา
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; #define row_col_size 3 void Rotate_ClockWise(int arr[row_col_size][row_col_size]){ for(int i = 0; i < row_col_size / 2; i++){ for(int j = i; j < row_col_size - i - 1; j++){ int ptr = arr[i][j]; arr[i][j] = arr[row_col_size - 1 - j][i]; arr[row_col_size - 1 - j][i] = arr[row_col_size - 1 - i][row_col_size - 1 - j]; arr[row_col_size - 1 - i][row_col_size - 1 - j] = arr[j][row_col_size - 1 - i]; arr[j][row_col_size - 1 - i] = ptr; } } } int main(){ int arr[row_col_size][row_col_size] = { { 5, 1, 4},{ 9, 16, 12 },{ 2, 8, 9}}; Rotate_ClockWise(arr); cout<<"Rotation of a matrix by 90 degree in clockwise direction without using any extra space is: \n"; for(int i = 0; i < row_col_size; i++){ for(int j = 0; j < row_col_size; j++){ cout << arr[i][j] << " "; } cout << '\n'; } return 0; }
ผลลัพธ์
หากเรารันโค้ดด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้
Rotation of a matrix by 90 degree in clockwise direction without using any extra space is: 2 9 5 8 16 1 9 12 4
แนวทางที่มีประสิทธิภาพ
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; #define row_col_size 3 void Rotate_ClockWise(int arr[row_col_size][row_col_size]){ for(int i = 0; i < row_col_size; i++){ for(int j = 0; j < row_col_size - i; j++){ int ptr = arr[i][j]; arr[i][j] = arr[row_col_size - 1 - j][row_col_size - 1 - i]; arr[row_col_size - 1 - j][row_col_size - 1 - i] = ptr; } } for(int i = 0; i < row_col_size / 2; i++){ for(int j = 0; j < row_col_size; j++){ int ptr = arr[i][j]; arr[i][j] = arr[row_col_size - 1 - i][j]; arr[row_col_size - 1 - i][j] = ptr; } } } int main(){ int arr[row_col_size][row_col_size] = { { 5, 1, 4},{ 9, 16, 12 },{ 2, 8, 9}}; Rotate_ClockWise(arr); cout<<"Rotation of a matrix by 90 degree in clockwise direction without using any extra space is: \n"; for(int i = 0; i < row_col_size; i++){ for(int j = 0; j < row_col_size; j++){ cout << arr[i][j] << " "; } cout << '\n'; } return 0; }
ผลลัพธ์
หากเรารันโค้ดด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้
Rotation of a matrix by 90 degree in clockwise direction without using any extra space is: 2 9 5 8 16 1 9 12 4