Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में किसी अतिरिक्त स्थान का उपयोग किए बिना मैट्रिक्स को घड़ी की दिशा में 90 डिग्री घुमाएँ

हमें एक 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 in clockwise direction without using any extra space is:
2 9 5
8 16 1
9 12 4

स्पष्टीकरण - हमें पूर्णांक प्रकार का 2-डी सरणी दिया जाता है। अब हम एक मैट्रिक्स को दक्षिणावर्त दिशा में 90 डिग्री घुमाएंगे।

Before rotation-:
{ { 5, 1, 4},
{ 9, 16, 12 },
{ 2, 8, 9}}
After rotation-:
2 9 5
8 16 1
9 12 4

इनपुट -

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:
2 9 5
8 16 1
9 12 4

स्पष्टीकरण - हमें पूर्णांक प्रकार का 2-डी सरणी दिया जाता है। अब हम एक मैट्रिक्स को दक्षिणावर्त दिशा में 90 डिग्री घुमाएंगे।

Before rotation-:
{ { 2, 1, 9},
{ 11, 6, 32 },
{ 3, 7, 5}}
After rotation-:
3 11 2
7 6 1
5 32 9

नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है

<एच2>1. भोले दृष्टिकोण
  • एक 2-डी पूर्णांक सरणी इनपुट करें जिसे row_col_size के साथ एक मैट्रिक्स के रूप में माना जाएगा।

  • डेटा को फ़ंक्शन में पास करें Rotate_ClockWise(arr)।

  • समारोह के अंदर Rotate_ClockWise(arr)

    • I से 0 तक के लिए लूप प्रारंभ करें जब तक कि मैं row_col_size/2 से कम नहीं हो जाता।

    • लूप के अंदर, एक और लूप शुरू करें जिसके लिए 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] और arr[j][row_col_size - 1 - मैं] पीटीआर के लिए।

  • i से 0 तक के लिए लूप प्रारंभ करें जब तक कि i row_col_size से कम न हो जाए। लूप के अंदर, j से 0 तक के लिए एक और लूप प्रारंभ करें, जो row_col_size से कम है; j++ और प्रिंट गिरफ्तारी[i][j].

2. कुशल दृष्टिकोण

  • एक 2-डी पूर्णांक सरणी इनपुट करें जिसे row_col_size के साथ एक मैट्रिक्स के रूप में माना जाएगा।

  • डेटा को फ़ंक्शन में पास करें Rotate_ClockWise(arr)।

  • समारोह के अंदर Rotate_ClockWise(arr)

    • I से 0 तक के लिए लूप प्रारंभ करें जब तक कि मैं row_col_size से कम नहीं हो जाता।

    • लूप के अंदर, j से 0 तक के लिए एक और लूप शुरू करें, जो 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.

    • i से 0 तक के लिए लूप प्रारंभ करें जब तक कि मैं row_col_size / 2 से कम नहीं हो जाता। लूप के अंदर, j से 0 तक j से 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] to ptr

  • i से 0 तक के लिए लूप प्रारंभ करें जब तक कि i row_col_size से कम न हो जाए। लूप के अंदर, j से 0 तक के लिए एक और लूप प्रारंभ करें, जो row_col_size से कम है; j++ और प्रिंट गिरफ्तारी[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

  1. सी ++ का उपयोग कर ओपनसीवी में एक छवि को कैसे घुमाएं?

    OpenCV के अंतर्निहित कार्यों का उपयोग करके छवि को घुमाना एक सरल कार्य है। इमेज को घुमाने के लिए, हमें highgui.hpp और imgproc.hpp हेडर फाइल्स का इस्तेमाल करना होगा और हम इस प्रोग्राम में और फंक्शन पेश करेंगे जो इमेज रोटेशन से संबंधित हैं। निम्नलिखित प्रोग्राम C++ का उपयोग करके OpenCV में एक छवि को क

  1. C++ प्रोग्राम इंसीडेंस मैट्रिक्स का उपयोग करके ग्राफ का प्रतिनिधित्व करने के लिए

    एक ग्राफ की घटना मैट्रिक्स मेमोरी में स्टोर करने के लिए ग्राफ का एक और प्रतिनिधित्व है। यह मैट्रिक्स एक वर्ग मैट्रिक्स नहीं है। आपतन मैट्रिक्स का क्रम V x E है। जहाँ V शीर्षों की संख्या है और E ग्राफ़ में किनारों की संख्या है। इस मैट्रिक्स की प्रत्येक पंक्ति में हम कोने रख रहे हैं, और प्रत्येक कॉलम

  1. सी ++ प्रोग्राम आसन्न मैट्रिक्स का उपयोग करके ग्राफ का प्रतिनिधित्व करने के लिए

    एक ग्राफ का आसन्न मैट्रिक्स आकार V x V का एक वर्ग मैट्रिक्स है। V, ग्राफ G के शीर्षों की संख्या है। इस मैट्रिक्स में प्रत्येक पक्ष में V कोने चिह्नित हैं। यदि ग्राफ़ में i से j कोने तक कुछ किनारे हैं, तो ith पर आसन्न मैट्रिक्स में पंक्ति और जम्मूवें कॉलम में यह 1 (या भारित ग्राफ़ के लिए कुछ गैर-शून्