70分TLE,HELP
  • 板块P1141 01迷宫
  • 楼主shengheng
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/7/26 12:17
  • 上次更新2023/11/3 07:35:43
查看原帖
70分TLE,HELP
816921
shengheng楼主2023/7/26 12:17
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,dx[6]={0,1,-1,0,0},dy[6]={0,0,0,1,-1},ans,w,h;
char a[1001][1001];
bool vis[1001][1001]={0};
inline void dfs(int x,int y){
	for(int i=1;i<=4;i++){
		register int nx=x+dx[i],ny=y+dy[i];
		//printf("%d nx,%d ny,%d x,%d y.\n",nx,ny,x,y);
		if(nx>=1&&nx<=n&&ny>=1&&ny<=n&&a[x][y]!=a[nx][ny]&&vis[nx][ny]==false){
			vis[nx][ny]=true;
			//cout<<"thx\n";
			dfs(nx,ny);
		}
	}
}signed main(){
	//freopen("l1.in","r",stdin);
	//freopen("l1.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);
    cout.tie(0);
    cin>>n>>m;
    for(register int i=1;i<=n;i++)for(register int j=1;j<=n;j++)cin>>a[i][j];
    while(m--){
    	cin>>w>>h;
        if(vis[w][h]){
			cout<<ans<<'\n';
			continue;
		}ans=0;
        memset(vis,0,sizeof(vis));
        vis[w][h]=true;
    	dfs(w,h);
    	for(register int i=1;i<=n;i++){
			for(register int j=1;j<=n;j++){
				if(vis[i][j]==true){
					ans++;
					//cout<<vis[i][j]<<' ';
				}
			}//cout<<'\n';
    	}cout<<ans<<'\n';
	}return 0;
}

2023/7/26 12:17
加载中...