ในปัญหานี้ เราได้รับ 2D square matrix mat[][] ขนาด n*n งานของเราคือค้นหาว่าเมทริกซ์ที่กำหนดคือ Toeplitz หรือไม่
เมทริกซ์ Toeplitz หรือที่เรียกว่าเมทริกซ์แนวทแยงคือเมทริกซ์ที่องค์ประกอบในแนวทแยงเริ่มจากมุมบนซ้ายไปยังมุมล่างขวา
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
ป้อนข้อมูล:
เสื่อ[][] ={{3, 5, 1},
{4, 3 ,2},
{1, 2, 3}}
ผลลัพธ์: ใช่
คำอธิบาย:
เส้นทแยงมุม :(0, 0), (1, 1) , (2, 2) มีค่าเท่ากัน 3.
แนวทางแก้ไข:
วิธีง่ายๆ ในการแก้ปัญหาคือการตรวจสอบองค์ประกอบทั้งหมดที่ดัชนีแนวทแยง ค่าแนวทแยงเหล่านี้จะเป็นดัชนีโดยที่ค่าของทั้ง i และ j เท่ากัน
ดังนั้น เราต้องตรวจสอบ i -> 0 ถึง n และ j -> 0 ถึง n ทั้งหมด ถ้า i =j และ mat[i][j] เหมือนกันหมด
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
ตัวอย่าง
#include <iostream>
using namespace std;
#define N 4
bool isToeplizMatrix(int mat[N][N])
{
int diagVal = mat[0][0];
for(int i = 0; i < N ; i++)
{
if(mat[i][i] != diagVal){
return false;
}
}
return true;
}
int main(){
int mat[N][N] = { { 6, 7, 8, 9 },
{ 4, 6, 7, 8 },
{ 1, 4, 6, 7 },
{ 0, 1, 4, 6 }};
if (isToeplizMatrix(mat))
cout<<"Matrix is a Toepliz matrix.";
else
cout<<"Matrix is not a Toepliz matrix.";
return 0;
} ผลลัพธ์
Matrix is a Toepliz matrix.