กำหนดกริด h × w มีเซลล์สีขาว (.) และสีดำ (#) เซลล์สีดำรวมกันเป็นรูปหลายเหลี่ยม (ขอบนอกสุดของกริดเป็นสีขาวเสมอ) ต้องการหาจำนวนด้านของรูปหลายเหลี่ยมนั้น
ตัวอย่าง: h=4, w=4, grid={"....", ".##.", ".##.", "...."} ผลลัพธ์: 4 (เป็นสี่เหลี่ยมจัตุรัส มี 4 ด้าน)
ขั้นตอนการแก้ปัญหา
- วนลูป
i = 1 ถึง h-1,j = 1 ถึง w-1(ดูบล็อก 2×2) - นับ
bl= จำนวนเซลล์สีดำในบล็อก 2×2 ที่มุม(i-1,j-1),(i-1,j),(i,j-1),(i,j) - ถ้า
bl == 1 หรือ bl == 3เพิ่มsides++(เพราะมุมของรูปหลายเหลี่ยมเกิดขึ้นที่จุดนี้) - คืนค่า
sides
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
void solve(int h, int w, vector<string> grid) {
int sides = 0;
for (int i = 1; i < h; i++) {
for (int j = 1; j < w; j++) {
int bl = 0;
if (grid[i-1][j-1] == '#') bl++;
if (grid[i-1][j] == '#') bl++;
if (grid[i][j-1] == '#') bl++;
if (grid[i][j] == '#') bl++;
if (bl == 1 || bl == 3) sides++;
}
}
cout << sides;
}
int main() {
int h = 4, w = 4;
vector<string> grid = {"....", ".##.", ".##.", "...."};
solve(h, w, grid);
return 0;
}
อินพุต / เอาต์พุต
Input: 4, 4, {"....", ".##.", ".##.", "...."}
Output: 4