题意:给你一个图形,让你求周长。
思想:首先把这个图存一遍,然后吧一圈都置为 . ,一旦搜索到边上就加一。
#include <cstdio>
#include <cstring>
char map[25][25];
int dir[8][2]={ 0,1, 1,1, 1,0, 1,-1, 0,-1, -1,-1, -1,0, -1,1 };
int arr[4][2]={ 0,1, 1,0, 0,-1 ,-1,0 };
int n,m,count;
void DFS(int x,int y)
{
int r,c,i;
map[x][y] = '#';
for(i=0;i<4;i++)//找每个点 上 下 左 右 是否 有 .
{
r = x + arr[i][0];
c = y + arr[i][1];
if(map[r][c]=='.'){
count++;
}
}
for(i=0;i<8;i++)//找联通
{
r = x + dir[i][0];
c = y + dir[i][1];
if(map[r][c]=='X'){
DFS(r,c);
}
}
}
int main()
{
int i,x,y;
while(scanf("%d%d%d%d",&n,&m,&x,&y) && n!=0 && m!=0 && x!=0 && y!=0)
{
memset(map,'.',sizeof(map));//把地图初始化为 .
for(i=1;i<=n;i++){
scanf("%s",&map[i][1]);
map[i][m+1] = '.';
}
count = 0;
DFS(x,y);
printf("%d\n",count);
}
return 0;
}