สมมติว่าเรามีเมทริกซ์ขนาด 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