很简单的dfs,求的是图形块的周长,有一定规律,我就不细说了,详见代码
#include <iostream>
#include <cstring>
using namespace std;
char mat[25][25];
bool vis[25][25];
int n,m;
void dfs(int x,int y)
{
if(x<1||y<1||x>n||y>m)return;
if(!vis[x][y]&&mat[x][y]=='X')
{
vis[x][y]=1;
dfs(x,y-1);
dfs(x,y+1);
dfs(x-1,y);
dfs(x+1,y);
dfs(x-1,y-1);
dfs(x-1,y+1);
dfs(x+1,y-1);
dfs(x+1,y+1);
}
}
int main()
{
int r,c;
while(cin>>n>>m>>r>>c)
{
if(!n&&!m&&!r&&!c)
break;
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>mat[i][j];
dfs(r,c);
int ans=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
if(vis[i][j])
{
int count=0;
if(vis[i-1][j])count++;
if(vis[i+1][j])count++;
if(vis[i][j-1])count++;
if(vis[i][j+1])count++;
ans+=4-count;
}
}
cout<<ans<<endl;
}
return 0;
}