<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">题目:</span>
有一条“封闭”的曲线划定的地图,
界定曲线上的点用“1”表示,曲线外的点用“0”
表示,试实施图形点扫描,统计地图的面积,即
“封闭”曲线内的“0”点数。
输入描述
0 0 0 1 0 0 0 1 0 0 0 0
0 1 1 0 1 0 1 0 1 1 1 0
1 0 0 0 1 1 0 0 0 0 1 1
1 0 0 0 0 0 0 0 0 1 0 0
0 1 0 0 0 1 0 0 0 0 1 0
1 0 0 0 1 0 1 1 0 0 0 1
0 1 0 1 0 0 0 1 0 0 1 0
0 1 0 1 0 0 1 0 0 0 0 1
1 0 0 0 1 0 0 1 0 0 1 0
0 1 0 0 0 1 0 0 1 0 1 0
0 0 1 0 0 1 0 0 1 1 0 0
0 0 0 1 1 0 0 0 0 0 0 0
输出描述
16
开始一看这个题目,会被这个12*12的矩阵吓住,其实没什么,明确题目要求-----求封闭曲线内的0的个数
思想:扩散传染
思想详解:其实说来简单,分两种情况
1:矩阵边上的0肯定不是封闭曲线内的0,
2:对于矩阵中的每个0,如果他的上下左右四个元素中有一个不是封闭曲线内的,那么这个元素也就被“传染”
针对这个题目的代码如下:
#include<stdio.h>
#define M 12
#define N 12
int main()
{
int array[M][N]={
0,0,0,1,0,0,0,1,0,0,0,0,
0,1,1,0,1,0,1,0,1,1,1,0,
1,0,0,0,1,1,0,0,0,0,1,1,
1,0,0,0,0,0,0,0,0,1,0,0,
0,1,0,0,0,1,0,0,0,0,1,0,
1,0,0,0,1,0,1,1,0,0,0,1,
0,1,0,1,0,0,0,1,0,0,1,0,
0,1,0,1,0,0,1,0,0,0,0,1,
1,0,0,0,1,0,0,1,0,0,1,0,
0,1,0,0,0,1,0,0,1,0,1,0,
0,0,1,0,0,1,0,0,1,1,0,0,
0,0,0,1,1,0,0,0,0,0,0,0};//count=4
int i,j;
int count=0;
for(i=0;i<M;i++)
{
if(array[0][i]==0)
array[0][i]=2;
if(array[5][i]==0)
array[5][i]=2;
if(array[i][0]==0)
array[i][0]=2;
if(array[i][5]==0)
array[i][5]=2;
}
for(i=0;i<M;i++)
for(j=0;j<N;j++)
if(array[i][j]==0)
if(array[i-1][j]==2||array[i+1][j]==2||array[i][j-1]==2||array[i][j+1]==2)
array[i][j]=2;
for(i=0;i<M;i++)
for(j=0;j<N;j++)
if(array[i][j]==0)
count++;
printf("%d\n",count);
}
1319

被折叠的 条评论
为什么被折叠?



