70分求助
  • 板块P1141 01迷宫
  • 楼主BEST_CAT
  • 当前回复9
  • 已保存回复9
  • 发布时间2023/2/19 10:38
  • 上次更新2023/10/24 00:22:54
查看原帖
70分求助
562891
BEST_CAT楼主2023/2/19 10:38

请求大佬指点

#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
const int arr=1005;
int n,m,ans[arr][arr];
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
char a[arr][arr];
bool vis[arr][arr];
int cnt=0;
void dfs(int x,int y){
	for(int i=0;i<4;i++){
		int nx=x+dx[i],ny=y+dy[i];
		if(nx<1||ny<1||nx>n||ny>n){
			continue;
		}
		if(a[x][y]!=a[nx][ny]&&!vis[nx][ny]){
			vis[nx][ny]=1;
			cnt++;
			dfs(nx,ny);
		}
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>a[i][j];
		}
	}
	int u,v;
	memset(ans,-1,sizeof(ans));
	while(m--){
		cin>>u>>v;
		memset(vis,0,sizeof(vis));
		if(ans[u][v]!=-1){
			cout<<ans[u][v]<<endl;
			continue;
		}
		cnt=1;
		vis[u][v]=1;
		dfs(u,v);
		cout<<cnt<<endl;
		ans[u][v]=cnt;
	}
	return 0;
}
2023/2/19 10:38
加载中...