C++程式:查詢網格中多邊形的邊數
假設我們給定一個維度為h x w的網格。網格中有兩種型別的單元格:白色單元格和黑色單元格。白色單元格用'.'表示,黑色單元格用'#'表示。現在網格中有多個黑色單元格構成一個多邊形。我們必須找出多邊形的邊數。需要注意的是,網格的最外層單元格始終是白色的。
因此,如果輸入如下:h = 4,w = 4,grid = {"....", ".##.", ".##.", "...."},則輸出為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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP