题目:构造一个只有01的n*n的矩阵,要求每一行和列的和为0-n-1的排列,且1和0的连通块的数量均为n
知识点:构造
思路:
其实挺简单,首先我们不管联通块,一定可以构造出行列和为0-n-1的排列,如图:
然后再考虑连通块,只能排列所有情况后用bfs打表(或者小范围自己手搓),然后我们可以得到这样的矩阵:
然后就很简单了,每偶数行和列赋1即可
using namespace std;
const int N=1e3+9;
int n;
vector<vector<int>> a(N,vector<int>(N,0));
void slove(int begin) {
for(int i=begin;i<=n;i++) {
a[begin][i]=1;
a[i][begin]=1;
}
}
int main() {
cin>>n;
for(int i=2;i<=n;i++) {
if(i%2==0) slove(i);
}
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) {
cout<<a[i][j];
}
cout<<endl;
}
}

京公网安备 11010502036488号