1110: 地砖问题
BFS
错误:在访问图的时候,maze[x][y],我误把它当作数学里的坐标系,认为x是在n列的限制里
x应该在0-m行内,y在0-n列内
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
const int N=30;
char maze[N][N];
int vis[30][30];
int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
int n,m,x,y;
int ans;
void bsf(int x,int y){
queue <PII> q;
q.push({x,y});
vis[x][y]=1;
while(!q.empty()){
auto now = q.front(); q.pop();
ans++;
for( int i=0;i<4;i++){
int xx=now.first+dir[i][0];
int yy=now.second+dir[i][1];
if(xx>=0&&xx<m&&yy>=0&&yy<n&&maze[xx][yy]=='.'&& vis[xx][yy]==0){
q.push({xx,yy});
vis[xx][yy]=1;
}
}
}
return;
}
int main(){
scanf("%d%d",&n,&m); //n列,m行
while(n!=0&&m!=0){
memset(vis,0,sizeof(vis));
ans=0;
for(int i=0;i<m;i++)
{
scanf("%s",maze[i]);
for(int j=0;j<n;j++){
if(maze[i][j]=='@'){
maze[i][j]='.';
x=i;y=j;
}
}
}
bsf(x,y);
printf("%d\n",ans);
scanf("%d%d",&n,&m);
}
return 0;
}

浙公网安备 33010602011771号