poj 1562 简单的BFS搜索

来源:互联网 发布:最新一手收藏品数据 编辑:程序博客网 时间:2024/05/16 15:05

对于个给出的图,用一个整型的二维数组代表有无石油,然后循环这个二维数组,如发现存在石油,则以这个方格为起始结点进行深搜,如发现石油就标记为-1,然后继续遍历这个二维数组,直至找到下一个有石油的方格,找到一个计数加1。最后的计数即为所求的石油的方块数。

#include<algorithm>#include<iostream>#include<cstdio>#include<cstdlib>using namespace std;char map[100][100];int vis[100][100];int m, n; int op[8][2]={{-1,-1},{-1,0},{1,0},{0,1},{1,1},{-1,1},{1,-1},{0,-1}}; void search(int x, int y) {      vis[x][y]=-1;      for(int i=0; i<8; i++)      if((x+op[i][0]>=0)&&(x+op[i][0]<m)&&(y+op[i][1]>=0)&&(y+op[i][1]<n)&&(vis[x+op[i][0]][y+op[i][1]]!=-1) && map[x+op[i][0]][y+op[i][1]]=='@')      search(x+op[i][0],y+op[i][1]); }int main(){    int i, j, sum;    while(scanf("%d %d",&m, &n)&&m)    {      sum = 0;     for(i=0; i<m; i++)     for(j=0; j<n; j++)     cin>>map[i][j];     memset(vis,0,sizeof(vis));     for(i=0; i<m; i++)     for(j=0; j<n; j++)     if(vis[i][j]!=-1&&map[i][j]=='@')     {        sum++;        search(i,j);     }     printf("%d\n",sum);    }   system("pause");   return 0;}


原创粉丝点击