bfs求助,大佬帮帮忙吧,谢谢啦
  • 板块学术版
  • 楼主1_4_1_2
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/7/19 09:47
  • 上次更新2023/11/4 14:13:08
查看原帖
bfs求助,大佬帮帮忙吧,谢谢啦
371075
1_4_1_2楼主2021/7/19 09:47

题目

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

0 0 0 0 0 0 0 0 0 0

0 0 0 0 * * * 0 0 0

0 0 0 0 * 0 0 * 0 0

0 0 0 0 0 * 0 0 * 0

0 0 * 0 0 0 * 0 * 0

0 * 0 * 0 * 0 0 * 0

0 * 0 0 * * 0 * * 0

0 0 * 0 0 0 0 * 0 0

0 0 0 * * * * * 0 0

0 0 0 0 0 0 0 0 0 0

输入样例

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

思路

把圈外都涂成1 ,最后数有几个0;

代码

#include<iostream>
#include<cstdio>
#include<algorithm>

using namespace std;

int m[15][15];
int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int fi[224][2],head,tail=1;
//int ouhuang;

void bfs()
{
	fi[head][0]=0;
	fi[head][1]=0;
	m[0][0]=1;
	while(head<tail)
	{
		//ouhuang++;
		//printf("\nthe %d\n",ouhuang);
		int x = fi[head][0];
		int y = fi[head][1];
		head++;
		//printf("head:%d  tail:%d\n",head,tail);
		for(int i = 0;i <= 3;i++)
		{
			int x1=x+dir[i][0];
			int y1=y+dir[i][1];
			if(x1<0 || x1>11 || y1<0 || y1>11 || m[x1][y1])
				continue;
			m[x1][y1]=1;
			fi[tail][0]=x1;
			fi[tail][1]=y1;
			tail++;
			//printf("head:%d  tail:%d\n",head,tail);
		}
		/*for(int i=0;i<=10;i++)
		{
			
			for(int j=0;j<=10;j++)
			{
				printf("%d ",m[i][j]);
			}
			printf("\n");
		}
		printf("\n");*/
	}
}

int main()
{
	for(int i=1;i<=10;i++)
	{
		for(int j=1;j<=10;j++)
		{
			scanf("%d",&m[i][j]);
		}
	}
	bfs();
	int cnt=0;
	for(int i=1;i<=10;i++)
		for(int j=1;j<=10;j++)
		{
			if(m[i][j]==0)cnt++;
		}
	printf("%d",cnt);
	return 0;
}

问:

为何if(x1<0 || x1>11 || y1<0 || y1>11 || m[x1][y1])中x1与y1要>11而不是>10?

谢谢大佬了Thanks♪(・ω・)ノ

2021/7/19 09:47
加载中...