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

题意

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

算法

推理(qwq)

思路

首先,整张图的度数和应为(n imes3),而每连一条边度数和增加(2),故(n)为奇数肯定不合法。另外,图的最大边数应大于等于(n imes3),故(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
"); continue;}
        memset(vis,0,sizeof(vis));
        printf("%d
", n * 3 / 2);
        for(int i = 1; i < n; ++ i){
            printf("%d %d
", i, i + 1);
            if(!vis[i]){
                vis[i] = vis[i + (n / 2)] = 1;
                printf("%d %d
", i, i + (n / 2));   //连对角线
            }
        }
        printf("%d %d
", n, 1);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/whenc/p/13793678.html