poj1111-搜索

来源:互联网 发布:淘宝上卖高仿的处罚 编辑:程序博客网 时间:2024/05/17 07:48
#include<stdio.h>#include<string.h>char maze[25][25];int map[25][25];int visit[25][25];int movex[8]={0,0,1,-1,1,1,-1,-1};int movey[8]={1,-1,0,0,1,-1,1,-1};int m,n,s,t,l;void dfs(int a,int b){//深度搜索 int x,y,i;for(i=0;i<8;i++){x=a+movex[i];y=b+movey[i];if(x>=1&&x<=m&&y>=1&&y<=n&&!visit[x][y]&&map[x][y]){visit[x][y]=1;//标记是否访问过,当map=1的时候标记 dfs(x,y);//maze[x][y]='.';}}}int main(){while(scanf("%d%d%d%d",&m,&n,&s,&t)!=EOF&&m){    int i,j;int x,y,k;memset(visit,0,sizeof(visit));          memset(map,0,sizeof(map));  getchar();l=0;for(i=1;i<=m;i++)    {      for(j=1;j<=n;j++)  {  scanf("%c",&maze[i][j]);  if(maze[i][j]=='X')    map[i][j]=1;//访问x的   //if(maze[i][])  else   map[i][j]=0;  }  getchar();}visit[s][t]=1;dfs(s,t);for(i=1;i<=m;i++) for(j=1;j<=n;j++) {     if(visit[i][j]) for(k=0;k<4;k++) { x=i+movex[k]; y=j+movey[k]; if(map[x][y]==0) {//计算周长  l++; } } } printf("%d\n",l);}return 0;}