bfs80分求助
  • 板块P1141 01迷宫
  • 楼主cuiyuchen
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/7/5 21:16
  • 上次更新2023/11/3 11:25:24
查看原帖
bfs80分求助
821038
cuiyuchen楼主2023/7/5 21:16
#include<iostream>
#include<cstring>
using namespace std;
int n,m,ans,nx,ny,f,r; 
char num[1005][1005];
int _ans[1005][1005];
int dx[4] = {0,0,1,-1};
int dy[4] = {-1,1,0,0};
struct node{
	int x,y;
}q[1000005];
void bfs(int i,int j){
	f = r = 1;
	r++;
	q[f].x = i;
	q[f].y = j;
	_ans[i][j] = true;
	ans = 1;
	while(f < r){
		int a = q[f].x;
		int b = q[f].y;
		for(int i = 0;i < 4;i++){
			nx = a + dx[i];
			ny = b + dy[i];
			if(nx < 1 || ny < 1 || nx > n || ny > n || _ans[nx][ny] != false || num[nx][ny] == num[a][b])
				continue;
			_ans[nx][ny] = true;
			q[r].x = nx;
			q[r].y = ny;
			r++;
			ans++;
		}
		f++;
	}
	for(int t = 1;t <= r;t++)
		_ans[q[t].x][q[t].y] = ans;
}
int main(){
	cin >> n >> m;
	for(int i = 1;i <= n;i++)
		for(int j = 1;j <= n;j++)
		    cin >> num[i][j];
	for(int i = 1;i <= m;i++){
		int i1,j1;
		cin >> i1 >> j1;
		if(_ans[i1][j1] != 0){
		    cout << _ans[i1][j1] << endl;
		    continue; 
		}
		memset(q,0,sizeof(q));
		bfs(i1,j1);
		cout << _ans[i1][j1] << endl;
	}
	return 0;
}
2023/7/5 21:16
加载中...