สมมติว่าเรามีเมทริกซ์ขนาด n x m แต่ละเซลล์จะมีค่าหนึ่งค่าตั้งแต่ 0 ถึง 9 ควรมีแถบธง:แถวแนวนอนแต่ละแถวของธงควรมีสี่เหลี่ยมที่มีสีเดียวกัน และสีของแถวแนวนอนที่อยู่ติดกันควรต่างกัน เราต้องตรวจสอบเมทริกซ์ที่กำหนดว่าเป็นแฟล็กที่ถูกต้องหรือไม่
ดังนั้นหากอินพุตเป็นแบบ
0 | 0 | 0 |
1 | 1 | 1 |
3 | 3 | 3 |
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
n := row count of matrix m := column count of matrix l := 'm' res := 1 for initialize i := 0, when i < n, update (increase i by 1), do: f := matrix[i, 0] for initialize j := 0, when j < m, update (increase j by 1), do: if matrix[i, j] is not equal to f, then: res := 0 if l is same as f, then: res := 0 l := f return (if res is non-zero, then true, otherwise false)
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h> using namespace std; bool solve(vector<vector<int>> matrix){ int n = matrix.size(); int m = matrix[0].size(); char l = 'm'; bool res = 1; for (int i = 0; i < n; i++){ char f = matrix[i][0]; for (int j = 0; j < m; j++){ if (matrix[i][j] != f) res = 0; } if (l == f) res = 0; l = f; } return res ? true : false; } int main(){ vector<vector<int>> matrix = { { 0, 0, 0 }, { 1, 1, 1 }, { 3, 3, 3 } }; cout << solve(matrix) << endl; }
อินพุต
{ { 0, 0, 0 }, { 1, 1, 1 }, { 3, 3, 3 } }
ผลลัพธ์
1