poj1111 Image Perimeters
解题思路:重叠性的,可以说是双从的广度优先搜索,是基本广度优先搜索的拓展。
给一个图,n行m列,由X和。组成
12055559 | Accepted | 180K | 0MS | 1303B | 2013-08-30 15:17:23 |
#include#include #include using namespace std; int n,m,sx,sy; int flag[25][25]; int dir[8][2]={1,0,0,1,-1,0,0,-1,1,1,-1,1,1,-1,-1,-1}; int dircul[4][2]={1,0,0,1,-1,0,0,-1}; struct node { int x; int y; }; int bfs() { int i,j; int xx,yy; int sum=0; node now,next; queue q; now.x=sx; now.y=sy; flag[sx][sy]=2; q.push(now); while(!q.empty()) { now=q.front(); q.pop(); for(i=0;i<4;i++) { xx=now.x+dircul[i][0]; yy=now.y+dircul[i][1]; if(!flag[xx][yy])sum++; } for(i=0;i<8;i++) { next.x=now.x+dir[i][0]; next.y=now.y+dir[i][1]; if(flag[next.x][next.y]==1) { q.push(next); flag[next.x][next.y]=2; } } } return sum; } int main() { char x[25]; int i,j; while(scanf("%d%d%d%d",&n,&m,&sx,&sy)&&n||m||sx||sy) { memset(flag,0,sizeof(flag)); for(i=1;i<=n;i++) { scanf("%s",x+1); for(j=1;j<=m;j++) if(x[j]=='X')flag[i][j]=1; } printf("%d\n",bfs()); } return 0; }