题目链接:
思路:
多边形的边数和顶点数相等,所以等效于算顶点数,形成一个正方形的四个相连块中,如果有一个或者三个是黑色,说明是一个”拐点“,也就是多边形的顶点。
代码:
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <string.h>
using namespace std;
const int maxn = 12;
char mp[maxn][maxn];
int main(){
int h, w;
cin >> h >> w;
for(int i=0; i<h; i++){
for(int j=0; j<w; j++){
char ch;
cin >> ch;
if(ch == '.') mp[i][j] = 0; // 0表示白块
else mp[i][j] = 1; // 1表示黑块
}
}
int ans = 0;
for(int i=0; i<h-1; i++){
for(int j=0; j<w-1; j++){
int tmp = mp[i][j]+mp[i+1][j]+mp[i][j+1]+mp[i+1][j+1];
if(tmp == 1 || tmp == 3) ans++;
}
}
cout << ans << endl;
}