题解 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;
}