สมมติว่าเรามีเมทริกซ์ขนาด n x m เซลล์เป็น 'W' (ขาว) หรือ 'B' (ดำ) มีสี่เหลี่ยมจัตุรัสภายในตารางที่มีความยาวคี่ถูกทาสีดำ เราต้องหาจุดกึ่งกลางของสี่เหลี่ยมนี้
เช่น ถ้าอินพุตเป็นตาราง 5x6 ที่มีบล็อกสีดำ 3x3 ตั้งแต่คอลัมน์ 2-4 และแถว 0-2 เอาต์พุตจะเป็น (3, 1)
ขั้นตอนการแก้ปัญหา
n := จำนวนแถวของเมทริกซ์
m := จำนวนคอลัมน์ของเมทริกซ์
cnt := 0
X := 0
Y := 0
for i := 0 ถึง n-1:
for j := 0 ถึง m-1:
if matrix[i, j] == 'B':
เพิ่ม cnt ขึ้น 1
X := X + i
Y := Y + j
X := X / cnt
Y := Y / cnt
return (Y, X)
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
void solve(vector<vector<char>> matrix) {
int n = matrix.size();
int m = matrix[0].size();
int cnt = 0, X = 0, Y = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++)
if (matrix[i][j] == 'B')
cnt++, X += i, Y += j;
}
X /= cnt;
Y /= cnt;
printf("%d, %d\n", Y, X);
}
int main() {
vector<vector<char>> matrix = {
{ 'W', 'W', 'B', 'B', 'B', 'W' },
{ 'W', 'W', 'B', 'B', 'B', 'W' },
{ 'W', 'W', 'B', 'B', 'B', 'W' },
{ 'W', 'W', 'W', 'W', 'W', 'W' },
{ 'W', 'W', 'W', 'W', 'W', 'W' }
};
solve(matrix);
}
อินพุต
{ { 'W', 'W', 'B', 'B', 'B', 'W' }, { 'W', 'W', 'B', 'B', 'B', 'W' }, { 'W', 'W', 'B', 'B', 'B', 'W' }, { 'W', 'W', 'W', 'W', 'W', 'W' }, { 'W', 'W', 'W', 'W', 'W', 'W' } }
เอาต์พุต
3, 1