ধরুন, আমাদেরকে h x w মাত্রার একটি গ্রিড দেওয়া হয়েছে। গ্রিডে দুটি ধরণের কোষ রয়েছে, সাদা এবং কালো কোষ। সাদা কোষ '.' দ্বারা প্রতিনিধিত্ব করা হয়, যেখানে কালো কোষ '#' দ্বারা প্রতিনিধিত্ব করা হয়। এখন গ্রিডটিতে একাধিক কালো কোষ রয়েছে যা একটি বহুভুজ গঠন করে। বহুভুজের কতগুলো বাহু আছে তা বের করতে হবে। উল্লেখ্য, গ্রিডের বাইরের কক্ষগুলো সবসময় সাদা থাকে।
সুতরাং, যদি ইনপুটটি h =4, w =4, গ্রিড ={"....", ".##", ".##.", "...."} হয়, তাহলে আউটপুট 4 হবে।
কালো কোষগুলি একটি বর্গক্ষেত্র গঠন করে এবং একটি বর্গক্ষেত্রের 4টি দিক রয়েছে৷
পদক্ষেপ
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
sides := 0 for initialize i := 1, when i < h, update (increase i by 1), do: for initialize j := 1, when j < w, update (increase j by 1), do: bl := 0 if grid[i - 1, j - 1] is same as '#', then: (increase bl by 1) if grid[i - 1, j] is same as '#', then: (increase bl by 1) if grid[i, j - 1] is same as '#', then: (increase bl by 1) if grid[i, j] is same as '#', then: (increase bl by 1) if bl is same as 1 or 3, then: (increase sides by 1) return sides
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#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.at(i - 1).at(j - 1) == '#') { bl++; } if(grid.at(i - 1).at(j) == '#') { bl++; } if(grid.at(i).at(j - 1) == '#') { bl++; } if(grid.at(i).at(j) == '#') { bl++; } if(bl == 1 or bl == 3) { sides++; } } } cout << sides; } int main() { int h = 4, w = 4; vector<string> grid = {"....", ".##.", ".##.", "...."}; solve(h, w, grid); return 0; }
ইনপুট
4, 4, {"....", ".##.", ".##.", "...."}
আউটপুট
4