站外题(魔怔哥...(大雾)
  • 板块灌水区
  • 楼主Wendy_Hello_qwq
  • 当前回复9
  • 已保存回复9
  • 发布时间2024/7/13 10:12
  • 上次更新2024/7/13 11:35:01
查看原帖
站外题(魔怔哥...(大雾)
1039211
Wendy_Hello_qwq楼主2024/7/13 10:12
1117. 【宽度优先搜索BFS】面积

题目描述
编程计算由“*”号围成的下列图形的面积。面积计算方法是统计*号所围成的闭合曲线中水平线和垂直线交点的数目。如下图所示,在10*10的二维数组中,有“*”围住了15个点,因此面积为15。

输入
从文件 area.in 中读入数据。

如上

输出
输出到文件 area.out 中。

如上

样例输入 复制
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

样例输出 复制
15
#include <cstdio>
using namespace std;
int ans, a[17][17];
int h, t, q[10007][2];
int dx[4] = {0, 0, 1, -1}, dy[4] = {1, -1, 0, 0};
int main()
{
//	freopen ("area.in", "r", stdin);
//	freopen ("area.out", "w", stdout);
	for (int i = 1; i <= 10; i++)
	{
		for (int j = 1; j <= 10; j++)
			scanf ("%d", &a[i][j]);
	}
	for (int i = 0; i <= 11; i++)
	{
		for (int j = 0; j <= 11; j++)
		{
			if (a[i][j] == 0)
				a[i][j] = 2;
		}
	}
	for (int i = 0; i <= 11; i++)
	{
		for (int j = 0; j <= 11; j++)
		{
			h = 0, t = 1;
			q[t][0] = i;
			q[t][1] = j;
			while (h < t)
			{
				h++;
				int x = q[h][0];
				int y = q[h][1];
				for (int k = 0; k < 4; k++)
				{
					int xx = x + dx[k];
					int yy = y + dy[k];
					if (xx >= 0 && xx <= 11 && yy >= 0 && yy <= 11 && a[xx][yy] == 2)
					{
						t++;
						q[t][0] = xx;
						q[t][1] = yy;
						a[xx][yy] = 0;
					}
				}
			}
		}
	}
	for (int i = 1; i <= 10; i++)
	{
		for (int j = 1; j <= 10; j++)
		{
			if (a[i][j] == 2)
				ans++;
		}
	}
	printf ("%d", ans);
	return 0;
}

又不会了,代码到底哪有问题,大佬请赐教!

2024/7/13 10:12
加载中...