F 题
我们用BFS,先扫一遍,遇到1就把坐标加入队列,然后逐个节点出列,检查四个对角方向有没有黑的,比如说左上有黑的,就把上面,左边染黑,又把被染黑的节点加入队列,如果之前就被染黑了的节点就不管他,一直到队列为空
#define ll long long 
#include<bits/stdc++.h>
using namespace std;
void solve(){
    int n; cin>>n;
    vector<vector<int>>nums(n,vector<int>(n,0));
    pair<int,int>a;
    queue<pair<int,int>>q;
    for(int i=0;i<n;i++){
    	string s; cin>>s;
        for(int j=0;j<n;j++){
            if(s[j]=='1'){
            	nums[i][j]=1;
                a.first=i; a.second=j;
                q.push(a);
            }
        }
    }
    while(!q.empty()){
    	auto t=q.front();
    	int x=t.first,y=t.second;
    	q.pop();
    	if(x+1<n&&y-1>=0&&nums[x+1][y-1]==1){
    		if(nums[x+1][y]==0){
    			a.first=x+1;
    			a.second=y;
    			q.push(a);
			}
			if(nums[x][y-1]==0){
    			a.first=x;
    			a.second=y-1;
    			q.push(a);
			}
    		nums[x+1][y]=1;
    		nums[x][y-1]=1;
		}
		if(x+1<n&&y+1<n&&nums[x+1][y+1]){
			if(nums[x+1][y]==0){
    			a.first=x+1;
    			a.second=y;
    			q.push(a);
			}
			if(nums[x][y+1]==0){
    			a.first=x;
    			a.second=y+1;
    			q.push(a);
			}
			nums[x+1][y]=1;
			nums[x][y+1]=1;
		}
		if(x-1>=0&&y-1>=0&&nums[x-1][y-1]==1){
    		if(nums[x-1][y]==0){
    			a.first=x-1;
    			a.second=y;
    			q.push(a);
			}
			if(nums[x][y-1]==0){
    			a.first=x;
    			a.second=y-1;
    			q.push(a);
			}
    		nums[x-1][y]=1;
    		nums[x][y-1]=1;
		}
		if(x-1>=0&&y+1<n&&nums[x-1][y+1]){
			if(nums[x-1][y]==0){
    			a.first=x-1;
    			a.second=y;
    			q.push(a);
			}
			if(nums[x][y+1]==0){
    			a.first=x;
    			a.second=y+1;
    			q.push(a);
			}
			nums[x-1][y]=1;
			nums[x][y+1]=1;
		}
	}
    for(int i=0;i<n;i++){
    	for(int j=0;j<n;j++){
    		cout<<nums[i][j];
		}
		cout<<endl; 
	}
    return ;
}
int main(){
    int t; cin>>t;
    while(t--){
        solve();
    }
    cout<<endl;
    return 0;
}