題意:

  圖中有n個點,開始有a個連通塊,然後連著的邊斷開,不連的邊連上,變為b個連通塊,輸出原圖的鄰接矩陣。

解析:

  原圖中連通塊大於1的圖,經過上述操作後,一定變成只有1個連通塊的圖。

  若n != 2 || n != 3 則存在原圖中連通塊為1的圖,經過上述操作後,一定變成只有1個連通塊的圖

  所以a 和 b 肯定有一個為1

  對於a != 1的情況,輸出的時候只需要把前a-1個點 不連邊 第a個到最後一個沒相鄰的兩個連一條邊 即可

因為a 和 b 是互補的 所以 a == 1時 swap交換一下a和b  並且交換1和0

#include "iostream"
#include "algorithm"
using namespace std;
int n,a,b;
char ch1='',ch2='';
int main() {
cin>>n>>a>>b;
if (a!=&&b!=||a==&&b==&&n<=&&n>=||a>n||b>n) {cout<<"NO"<<endl; return ;}
cout<<"YES"<<endl;
if (b !=) swap(a,b), swap(ch1,ch2);
for (int i=;i<n;i++) {
for (int j=;j<n;j++) {
cout<<(i==j?'':(i+==j&&j>=a||j+==i&&i>=a?ch1:ch2));
}
cout<<endl;
}
}