poj 1562 Oil Deposits(迷宫)

来源:互联网 发布:ant java api 编辑:程序博客网 时间:2024/06/06 11:40

http://poj.org/problem?id=1562

题意:寻找矿藏的数量,8个方向(上下左右、斜对角)都为相同的一个矿藏

分析:广搜,在有矿藏的地方找寻所有的点

#include<iostream>#include<cstdio>#include<cstring>#include<queue>using namespace std;int a[102][102],vis[8][2]={-1,0,1,0,0,-1,0,1,-1,1,1,1,-1,-1,1,-1};int n,m;struct WALL{int x,y;}wall,pos,temp;void BFS(){int i,j,k,sum;queue<WALL>q1;sum=0;for(i=0;i<n;i++){for(j=0;j<m;j++)if(a[i][j]==1){sum++;pos.x=i,pos.y=j;q1.push(pos);a[pos.x][pos.y]=0;while(!q1.empty()){temp=q1.front();q1.pop();for(k=0;k<8;k++){wall=temp;wall.x+=vis[k][0],wall.y+=vis[k][1];if(a[wall.x][wall.y]==1&&wall.x>=0&&wall.x<n&&wall.y>=0&&wall.y<m)q1.push(wall),a[wall.x][wall.y]=0;}}}}cout<<sum<<endl;}int main(){int i,j;char str[102];while(scanf("%d%d",&n,&m)&&n){memset(a,0,sizeof(a));for(i=0;i<n;i++){scanf("%s",str);for(j=0;j<m;j++){if(str[j]=='@') a[i][j]=1;else a[i][j]=0;}}BFS();}return 0;}