1 条题解

  • 0
    @ 2025-10-10 19:27:25

    C++ :

    #include<bits/stdc++.h>
    using namespace std;
    
    char a[1100][1100];
    //存储每个点可达的格子数量
    int r[1100][1100];
    int q[1000100][3];
    int n,m;
    bool f[1100][1100];
    int fx[5] = {0,0,1,0,-1};
    int fy[5] = {0,1,0,-1,0};
    
    int bfs(int x,int y) {
    	int c = 1;
    	int head=1,tail=1;
    	q[1][1] = x;
    	q[1][2] = y;
    	f[x][y] = true;
    	int tx,ty;
    	while(head<=tail) {
    		for(int i = 1; i <= 4; i++) {
    			tx = q[head][1] + fx[i];
    			ty = q[head][2] + fy[i];
    			if((a[q[head][1]][q[head][2]]=='0'&&a[tx][ty]=='1'||a[q[head][1]][q[head][2]]=='1'&&a[tx][ty]=='0')&&f[tx][ty]==false) {
    				tail++;
    				q[tail][1] = tx;
    				q[tail][2] = ty;
    				f[tx][ty] = true;
    				c++;
    			}
    		}
    
    		head++;
    	}
    
    	//把队列中的数字对应的结果标记一下
    	for(int i = 1; i <= tail; i++) {
    		r[q[i][1]][q[i][2]] = c;
    	}
    
    	return c;
    }
    
    int main() {
    	int i,j,x,y;
    	cin>>n>>m;
    	for(i = 1; i <= n; i++) {
    		for(j = 1; j <= n; j++) {
    			cin>>a[i][j];
    		}
    	}
    
    	memset(r,-1,sizeof(r));
    	for(i = 1; i <= m; i++) {
    		cin>>x>>y;
    
    		if(r[x][y] == -1) {
    			r[x][y] = bfs(x,y);//广搜
    		} 
    		
    		cout<<r[x][y]<<endl;
    	}
    
    }
    
    • 1

    信息

    ID
    722
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者