#include<iostream> #include<cstdio> #include<queue> using namespace std; char room[25][25]; int dir[4][2]={{-1,0},{0,-1},{1,0},{0,1}}; int Wx,Hy,num; //Wx,Hy:长宽的边界 ,num:从初始瓷砖到能到达的瓷砖的总数 #define CHECK(x,y) (x<Wx&&x>=0&&y>=0&&y<Hy) //检查是否越界 struct node { int x,y; }; void BFS(int dx,int dy) { queue<node> q; node start,next; start.x = dx; start.y = dy; q.push(start);//把当前节点入队 while(!q.empty()) { start = q.front(); q.pop(); for(int i=0;i<4;++i) { next.x=start.x+dir[i][0]; next.y=start.y+dir[i][1]; if(CHECK(next.x,next.y)&&room[next.x][next.y]==‘.‘) { room[next.x][next.y]=‘#‘;//标记一下当前节点已经走过了 num++;//步数自增 q.push(next);//将子节点入队 } } } } int main() { int x,y,dx,dy; //dx,dy: 人的站位 while(cin>>Wx>>Hy) { if(Wx==0&&Hy==0) { break; } for(y=0;y<Hy;++y) { for(x=0;x<Wx;++x) { cin>>room[x][y]; if(room[x][y]==‘@‘) { dx=x; dy=y; } } } num=1; BFS(dx,dy); cout<<num<<endl; } return 0; }
原文地址:https://www.cnblogs.com/chrysanthemum/p/11823037.html
时间: 2024-10-15 03:23:03