题解 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;
}
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步