挨个判断每一个1的出现是否合法:
合法条件:要么在某一个行或列最后一个要么后面有1
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
char g[1000][1000];
int n,t;
int main()
{cin>>t;while(t--){bool st=1;cin>>n;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)cin>>g[i][j];for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(g[i][j]=='1'){if(i==n||j==n||g[i][j+1]=='1'||g[i+1][j]=='1') continue;else st=0;} }} if(st) cout<<"YES"<<endl;else cout<<"NO"<<endl;}return 0;
}