สมมติว่าเรามีเมทริกซ์ขนาด n x m เซลล์มี 'W' เป็นสีขาวหรือ 'B' เป็นสีดำ สี่เหลี่ยมจัตุรัสบางอันภายในโต๊ะที่มีความยาวคี่ถูกทาสีดำ เราต้องหาจุดศูนย์กลางของจตุรัสนี้ให้ได้
ดังนั้นหากอินพุตเป็นแบบ
| ว | ว | ข | ข | ข | ว |
| ว | ว | ข | ข | ข | ว |
| ว | ว | ข | ข | ข | ว |
| ว | ว | ว | ว | ว | ว |
| ว | ว | ว | ว | ว | ว |
แล้วผลลัพธ์จะเป็น (3, 1).
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
n := row count of matrix m := column count of matrix cnt := 0 X := 0 Y := 0 for initialize i := 0, when i < n, update (increase i by 1), do: for initialize j := 0, when j < m, update (increase j by 1), do: if matrix[i, j] is same as 'B', then: increase cnt by 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