ในปัญหานี้ เราได้รับ 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.