70分代码求调,悬关,T了3个点
  • 板块P1141 01迷宫
  • 楼主liulechen
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/12/29 13:55
  • 上次更新2024/12/29 18:57:58
查看原帖
70分代码求调,悬关,T了3个点
768259
liulechen楼主2024/12/29 13:55
#include<bits/stdc++.h>
using namespace std;
long long n,m,s,e,flag[1001][1001],vis[4][2]={-1,0,1,0,0,-1,0,1},v,ans[100001];
char arr[1001][1001];
struct node{
	int x,y,step;
};
queue<node> q;
void bfs(){
	q.push({s,e,0});
	flag[s][e]=v;
	while(!q.empty()){
		for(int i=0;i<4;i++){
			int xx=q.front().x+vis[i][0];
			int yy=q.front().y+vis[i][1];
			if(flag[xx][yy]==0 && xx>=1 && xx<=n && yy>=1 && yy<=n && arr[xx][yy]!=arr[q.front().x][q.front().y]){
				flag[xx][yy]=v;
				q.push({xx,yy,q.front().step+1});
			}
		}
		q.pop();
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>arr[i][j];
		}
	}
	while(m--){
		v++;
		cin>>s>>e;
		if(flag[s][e]!=0){
			cout<<ans[v];
			continue;
		}
		bfs();
		long long cnt=0;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if(flag[i][j]){
					cnt++;
				}
				flag[i][j]=0;
			}
		}
		ans[v]=cnt;
		cout<<cnt<<endl;
	}
}
2024/12/29 13:55
加载中...