SGU101 Domino
来源:互联网 发布:网络连接那有个小叉号 编辑:程序博客网 时间:2024/05/22 06:21
将骨牌上的数字看作点,骨牌看作连接两点的边,然后求欧拉路径。
#include <stdio.h>#include <cstring>int map[10][10], e[102][2], d[10];int ans[102][2], cnt, s;bool vis[102];void dfs(int u){ for (int i = 0; i <= 6; ++i) { if (map[u][i]) { --map[u][i]; --map[i][u]; dfs(i); cnt++; ans[cnt][0] = u; ans[cnt][1] = i; } }}int main(){ int n; int a, b; scanf("%d", &n); //包含头文件string.h时使用memset竟然WA~ memset(d, 0, sizeof(d)); memset(map, 0, sizeof(map)); memset(vis, false, sizeof(vis)); for (int i = 1; i <= n; ++i) { scanf("%d %d", &a, &b); d[a]++; d[b]++; map[a][b]++; map[b][a]++; e[i][0] = a, e[i][1] = b; } cnt = 0; for (int i = 0; i <= 6; ++i) if (d[i]) s = i; for (int i = 0; i <= 6; ++i) { if (d[i] & 1) { cnt++; s = i; } } if (cnt > 2) { printf("No solution\n"); return 0; } cnt = 0; dfs(s); if (cnt < n) { printf("No solution\n"); return 0; } for (int i = cnt; i >= 1; --i) { for (int j = 1; j <= n; ++j) { if (!vis[j] && e[j][0] == ans[i][0] && e[j][1] == ans[i][1]) { printf("%d +\n", j); vis[j] = true; break; } else if (!vis[j] && e[j][0] == ans[i][1] && e[j][1] == ans[i][0]) { printf("%d -\n", j); vis[j] = true; break; } } } return 0;}
- SGU101 Domino
- sgu101:Domino
- SGU101 Domino
- SGU101 Domino
- sgu101: Domino
- SGU101 Domino
- SGU101 - Domino(欧拉路)
- SGU101 Domino 留坑
- SGU101 Domino(欧拉回路)
- SGU101
- Sgu101
- sgu101
- SGU101 DFS
- SGU101----110
- SGU101欧拉回路
- sgu101-欧拉回路
- domino
- Domino
- Java定时任务
- 分享25个超酷的凸活版印制(Letterprint)名片设计
- 轻量级的Javascript代码语法高亮类库 - Rainbow
- 一种使用QThread线程的新方法QObject::moveToThread
- 分享一个纯CSS3的响应式(responsive layout)幻灯设计
- SGU101 Domino
- 图像处理-模板、卷积的整理
- 分享8个超酷的javascript类库和jQuery插件帮助你打造超炫的网站和web应用
- 30.子类如何使用super启动父类的构造方法
- hduoj1272:小希的迷宫
- apache中ab工具
- 展讯平台如何调试之打LOG--串口log
- 正则表达式验证身份证号
- JavaScript函数大全