Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ค้นหาความยาวด้านสูงสุดของสี่เหลี่ยมจัตุรัสในเมทริกซ์ใน C++


ในปัญหานี้ เราได้รับเมทริกซ์แบบ 2 มิติ[][] ขนาด n, n เป็นเลขคี่ งานของเราคือค้นหาความยาวด้านสูงสุดของสี่เหลี่ยมจัตุรัสในเมทริกซ์

คำอธิบายปัญหา − เราจำเป็นต้องหาความยาวของเมทริกซ์สี่เหลี่ยมจัตุรัสที่มีค่าปริมณฑลเท่ากันและใช้จุดศูนย์กลางเดียวกันกับเมทริกซ์

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

อินพุต

mat[][] = {
   {2, 4, 6, 6, 5},
   {1, 7, 7, 7, 3},
   {5, 7, 0, 7, 1},
   {3, 7, 7, 7, 1},
   {2, 0, 1, 3, 2}
}

ผลลัพธ์

3

แนวทางการแก้ปัญหา

วิธีแก้ปัญหาง่ายๆ คือ การหาองค์ประกอบศูนย์กลางของ thematrix เนื่องจากเป็นเมทริกซ์คี่ องค์ประกอบศูนย์กลางจะอยู่ที่ดัชนี (n/2, n/2) หลังจากหาจุดศูนย์กลางแล้ว เราจะพบ 2D sub- เมทริกซ์ที่อยู่รอบๆ ซึ่งจะตรวจสอบว่าองค์ประกอบทั้งหมดเหมือนกันหรือไม่

เมทริกซ์ย่อยที่ดัชนี i ห่างจากจุดศูนย์กลางจะมีองค์ประกอบของแถว (n/2 - 1) และ (n/2 + 1) จากดัชนี (n/2 - 1) ถึง (n/2 + 1) รวมถึงองค์ประกอบของคอลัมน์ (n/2 - 1) และ (n/2 + 1) จากดัชนี (n/2 - 1) ถึง (n/2 + 1) ที่ปริมณฑล เราจำเป็นต้องตรวจสอบว่าเมทริกซ์ย่อยสำหรับค่าใด ๆ ของ i ตั้งแต่ 0 ถึง n/2 มีองค์ประกอบปริมณฑลเหมือนกันหรือไม่

โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา

ตัวอย่าง

#include <iostream>
#define n 5
using namespace std;
int findMaxSideSquare(int matrix[][n]) {
   int squareLen = 1;
   for (int i = 0; i < n / 2; i++) {
      int sideVal = matrix[i][i];
      bool isSquare = true;
      for (int j = i; j < n - i; j++) {
         if (matrix[i][j] != sideVal)
            isSquare = false;
         if (matrix[n - i - 1][j] != sideVal)
            isSquare = false;
         if (matrix[j][i] != sideVal)
            isSquare = false;
         if (matrix[j][n - i - 1] != sideVal)
            isSquare = false;
      }
      if (isSquare)
         squareLen = n - 2 * i;
   }
   return squareLen;
}
int main() {
   int mat[n][n] = {
      {2, 4, 6, 6, 5},
      {1, 7, 7, 7, 3},
      {5, 7, 0, 7, 1},
      {3, 7, 7, 7, 1},
      {2, 0, 1, 3, 2}
   };
   cout<<"The maximum side length of square in a Matrix is "<<findMaxSideSquare(mat);
   return 0;
}

ผลลัพธ์

The maximum side length of square in a Matrix is 3