问题标题: 酷町堂:4759:棋盘上的行走

0
0
已解决
潘孝宇
潘孝宇
初级光能
初级光能

 

#include<bits/stdc++.h>
using namespace std;
struct node{
	int x,y,st;
};
queue<node> q;
int n,t,ux,uy,dir[4][2]={0,1,1,0,0,-1,-1,0};
bool g[1005][1005],v[1005][1005];
int bfs(int x,int y){
	memset(v,false,sizeof(v));
	q.push((node){x,y,0});
	int cnt=0;
	v[x][y]=true;
	while(!q.empty()){
		node h=q.front();
		q.pop();
		cnt++;
		for(int i=0;i<4;i++){
			int dx=h.x+dir[i][0],dy=h.y+dir[i][1];
			if(dx>=1&&dx<=n&&dy>=1&&dy<=n&&!v[dx][dy]&&g[dx][dy]!=g[h.x][h.y]){
				q.push((node){dx,dy,h.st+1});
				v[dx][dy]=true;
			}
		}
	}return cnt;
}
int main(){
	cin>>n>>t;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			char c;
			cin>>c;
			if(c=='0')g[i][j]=0;
			if(c=='1')g[i][j]=1;
		}
	}while(t--){
		cin>>ux>>uy;
		cout<<bfs(ux,uy)<<endl;
	}
	return 0;
}

TLE70代码,求优化/更好的方法!谢谢!

潘孝宇在2021-07-21 09:00:06追加了内容


0
已采纳
汪恺恒
汪恺恒
中级启示者
中级启示者

可以用并查集记录连通块啊

不然每次bfs会占用很多时间

0
0
0
0
0
0
我要回答