好东西又来了,求*内的面积
Part 1 读题!
编程计算由*号围成的下列图形的面积。面积计算方法是统计“*”号所围成的闭合曲线中点数目。
样例:
input:
0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 0 0 0
0 0 0 0 1 0 0 1 0 0
0 0 0 0 0 1 0 0 1 0
0 0 1 0 0 0 1 0 1 0
0 1 0 1 0 1 0 0 1 0
0 1 0 0 1 1 0 1 1 0
0 0 1 0 0 0 0 1 0 0
0 0 0 1 1 1 1 1 0 0
0 0 0 0 0 0 0 0 0 0
output:
15
Part 2 思路
使用循环将1外部的0替换为1,在1内的0不做处理。
全部替换后统计0的个数。
Part 3 代码
#include <iostream>
#include <queue>
using namespace std;
struct Node
{
int x, y;
};
int g[15][15];
queue<Node> q;
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};
void bfs(int x, int y)
{
q.push({x, y});
g[x][y] = 1;
while(q.size())
{
Node t = q.front();
q.pop();
for (int i = 0; i < 4; i ++)
{
int a = t.x + dx[i], b = t.y + dy[i];
if(a < 1 || a > 10 || b < 1 || b > 10 || g[a][b]) continue;
q.push({a, b});
g[a][b] = 1;
}
}
}
int main()
{
for (int i = 1; i <= 10; i ++)
for (int j = 1; j <= 10; j ++)
cin >> g[i][j];
for (int i = 1; i <= 10; i ++)
if(!g[1][i]) bfs(1, i);
for (int i = 1; i <= 10; i ++)
if(!g[10][i]) bfs(10, i);
for (int i = 1; i <= 10; i ++)
if(!g[i][1]) bfs(i, 1);
for (int i = 1; i <= 10; i ++)
if(!g[i][10]) bfs(i, 10);
int ans = 0;
for (int i = 1; i <= 10; i ++)
for (int j = 1; j <= 10; j ++)
if(!g[i][j]) ans ++;
cout << ans << endl;
return 0;
}
拜了个拜,记得点赞加关注!
粉丝+1每年加更5篇
目前每年?篇
(最多每年80篇)