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;
}
posted @ 2026-02-10 23:13  peter_shen  阅读(8)  评论(0)    收藏  举报