题意:
图中有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='1',ch2='0'; int main() { cin>>n>>a>>b; if (a!=1&&b!=1||a==1&&b==1&&n<=3&&n>=2||a>n||b>n) {cout<<"NO"<<endl; return 0;} cout<<"YES"<<endl; if (b !=1) swap(a,b), swap(ch1,ch2); for (int i=0;i<n;i++) { for (int j=0;j<n;j++) { cout<<(i==j?'0':(i+1==j&&j>=a||j+1==i&&i>=a?ch1:ch2)); } cout<<endl; } }