Graph And Its Complement CodeForces

题意:

  图中有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;
    }
}
自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
原文地址:https://www.cnblogs.com/WTSRUVF/p/9544492.html