挺有意思的搜索题.难度很基础.
题目大意:
给一个图像,要求从一个点开始搜,这个点所在的八连快的边长.
解题思想:
首先是深度优先或广度优先搜索8连块,然后对于没搜到的一个X像素,判断周围四个点是否是.或者越界.如果是就边长+1.
源代码:
#include <myhead>
const int N=27;
int n,m;
int ans;
char graph[N][N];
inline int cmp(int x,int y) {
if(x>n||y>m)
return 1;
if(graph[x][y]=='.')
return 1;
return 0;
}
int pre(int s,int t) {
int x,y,sum=0;
for(int i=0;i<4;++i) {
x=s+dx[i];
y=t+dy[i];
sum+=cmp(x,y);
}
return sum;
}
void dfs(int s,int t) {
ans+=pre(s,t);
int x,y;
for(int i=0;i<8;++i) {
x=s+dx1[i];
y=t+dy1[i];
if(graph[x][y]!='X') continue;
graph[x][y]='@';
dfs(x,y);
}
}
int main() {
int s,t;
while(scanf("%d%d%d%d",&n,&m,&s,&t),n) {
ans=0;
memset(graph,'.',sizeof(graph));
for(int i=1;i<=n;++i) {
scanf("%s",graph[i]+1);
}
graph[s][t]='@';
dfs(s,t);
printf("%d\n",ans);
}
return 0;
}