SGU 101 Domino(欧拉路径)
来源:互联网 发布:网络盗窃40万判多少年 编辑:程序博客网 时间:2024/05/21 07:55
0-6作为结点,那么每个骨牌相当于一条无向边了
建图,进行欧拉路径判断,
然后dfs找出路径打印即可
代码:
#include <cstdio>#include <cstring>#include <vector>using namespace std;const int N = 7;int n;struct Edge { int u, v, tp, id, vis; Edge() {} Edge(int u, int v, int tp, int id) { this->u = u; this->v = v; this->tp = tp; this->id = id; this->vis = 0; }}edge[205];int head[N], nxt[205], en;int deg[N];int judge() { int cnt = 0, v; for (int i = 0; i < 7; i++) if (deg[i]) v = i; for (int i = 0; i < 7; i++) { if (deg[i] % 2) { cnt++; v = i; } } if (cnt == 0 || cnt == 2) return v; return -1;}int ans[105][2], an;void add_edge(int u, int v, int tp, int id) { edge[en] = Edge(u, v, tp, id); nxt[en] = head[u]; head[u] = en++;}void dfs(int u) { for (int i = head[u]; i + 1; i = nxt[i]) { if (edge[i].vis) continue; edge[i].vis = edge[i^1].vis = 1; dfs(edge[i].v); ans[an][0] = edge[i].id; ans[an][1] = !edge[i].tp; an++; }}int main() { while (~scanf("%d", &n)) { int u, v; memset(head, -1, sizeof(head)); en = 0; memset(deg, 0, sizeof(deg)); for (int i = 1; i <= n; i++) { scanf("%d%d", &u, &v); deg[u]++; deg[v]++; add_edge(u, v, 0, i); add_edge(v, u, 1, i); } int s = judge(); if (s == -1) printf("No solution\n"); else { an = 0; dfs(s); if (an != n) printf("No solution\n"); else { for (int i = 0; i < an; i++) printf("%d %c\n", ans[i][0], ans[i][1] == 0 ? '+' : '-'); } } } return 0;}
0 0
- sgu 101 Domino 欧拉路径+DFS
- sgu-101 Domino 欧拉路径
- SGU 101 Domino(欧拉路径)
- SGU 101 Domino【欧拉路径】
- sgu 101 Domino【输出欧拉路径】
- SGU 101 Domino (欧拉路径 并查集)
- 【SGU】101. Domino 欧拉路径
- SGU 101 Domino 欧拉通路/回路
- sgu 101 Domino 欧拉通路
- [SGU 101] Domino [欧拉回路]
- SGU 101 Domino(无向图的欧拉路径)
- SGU 101. Domino 欧拉回路
- SGU 101. Domino 欧拉回路
- SGU 101 输出欧拉路径
- SGU 101 && POJ 1041 欧拉路径/欧拉回路
- sgu 101 Domino
- SGU 101 domino
- SGU 101 Domino
- 杂想
- 论生活中的贵人
- 高中语文,真的很难吗?
- 对话20岁的自己
- 今天聊个故事
- SGU 101 Domino(欧拉路径)
- 要离开PPTV了,再也不见。。。
- 。。。
- VC++显式(静态)调用、隐式(动态)调用及调试DLL
- RedHat(Linux)下安装Python3步骤
- 一些感概
- 如何记忆日语单词?
- 单台服务器上的并发TCP连接数可以有多少
- 获取IP地址