题解 UVA11387 The 3-Regular Graph(推理 + 建图)

题意

\(n\)个点,要求构造一张简单无向图,其中每个点入度都为\(3\),若可以构造则输出边数与边(顺序随意),无法构造则输出\(Impossible\)

算法

推理\(qwq\)

思路

首先,整张图的度数和应为\(n\times3\),而每连一条边度数和增加\(2\),故\(n\)为奇数肯定不合法。另外,图的最大边数应大于等于\(n\times3\),故\(2\)也是不合法的。
接着考虑构造:先连成首尾相连的环,这样每个点度数都为\(2\),然后连对角线即可(对角线连法见代码)。

代码

#include <bits/stdc++.h>

using namespace std;

int main(){
    int n, vis[110];
    while(scanf("%d", &n) != EOF && n){
        if(n < 3 || (n & 1)){ printf("Impossible\n"); continue;}
        memset(vis,0,sizeof(vis));
        printf("%d\n", n * 3 / 2);
        for(int i = 1; i < n; ++ i){
            printf("%d %d\n", i, i + 1);
            if(!vis[i]){
                vis[i] = vis[i + (n / 2)] = 1;
                printf("%d %d\n", i, i + (n / 2));   //连对角线
            }
        }
        printf("%d %d\n", n, 1);
    }
    return 0;
}
posted @ 2020-10-10 16:58  When_C  阅读(176)  评论(0编辑  收藏  举报