这道题其实我都没有看懂啥意思,也没太仔细看,就想着看看博客中某yuan博客中是否说出了它的题意,没想到一不小
心看见了求周长的方法,原来Perimeters就是周长的意思啊!!!旁边有几个点就给周长加一咯,就加了这一个功能而
已,之前先用dfs找出八连通全部块数就可以了。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char a[105][105];
int step[8][2]={-1,-1,-1,0,-1,1,0,-1,0,1,1,-1,1,0,1,1};
int step1[4][2]={-1,0,1,0,0,-1,0,1};
int len;
void dfs(int x,int y)
{
a[x][y]='*';
for(int i=0;i<4;i++)
{
int k1=x+step1[i][0];
int k2=y+step1[i][1];
if(a[k1][k2]=='.')
len++;
}
for(int i=0;i<8;i++)
{
int p=x+step[i][0];
int q=y+step[i][1];
if(a[p][q]=='X')
{
dfs(p,q);
}
}
}
int main()
{
int m,n,x,y,i,j;
while(scanf("%d%d%d%d",&m,&n,&x,&y),m!=0&&n!=0&&x!=0&&y!=0)
{
getchar();
len=0;
for(i=0;i<=m+1;i++)
{
a[0][i]='.';
a[m+1][i]='.';
a[i][0]='.';
a[i][n+1]='.';
}
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
scanf("%c",&a[i][j]);
}
getchar();
}
dfs(x,y);
printf("%d\n",len);
}
}