asdbfs

#include <iostream>
using namespace std;
#define N 21
struct Node{
       int x;
       int y;
};
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
char map[N][N];
int visit[N][N];
int bfs(int startx, int starty,int w,int h){
       Node q[N*N],cur,next;   // q为队列
       int  front,rear;        // front为队头指针,rear为队尾指针
       int i,x,y,sum;    
       front=rear=0;           // 队列q初始化
       sum=0;
       cur.x=startx;   cur.y=starty; 
       visit[startx][starty]=1;
       q[rear++]=cur;          // 初始结点入队
       while(rear!=front)      // 队列不为空 asda
       {
              cur=q[front++];     // 队头元素出队
              sum++;              // 方砖计数
              for (i=0;i<4;i++)
              {
                  x=cur.x+dx[i];  y=cur.y+dy[i];
                 if(x >=0 && x<h && y>=0 && y<w && map[x][y]!='#' && visit[x][y]==0)
                 {
                        visit[x][y] = 1;
                        next.x=x;  next.y=y;  // 由cur扩展出新结点next
                        q[rear++]=next;       // next结点入队
                  } 
              }
       }
       return sum;
}
int main(){
   int i,j,pos_x,pos_y,w,h,sum;
   while(1){
       cin>>w>>h;
        if (w==0 && h==0) break;
       for(i=0;i<h;i++){
          for(j=0;j<w;j++) {
              cin>>map[i][j];
              if (map[i][j]=='@')
             {
                pos_x = i;
                pos_y = j;
             }
              visit[i][j] = 0;
         }
      }
      sum=bfs(pos_x, pos_y,w,h);
      cout<<sum<<endl;
   }
   return 0;
}

  

posted @ 2022-03-15 13:42  Dsad123FFFG6645  阅读(35)  评论(0)    收藏  举报