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♪(・ω・)ノ