UVA10054-The Necklace
来源:互联网 发布:cmge中手游 知乎 编辑:程序博客网 时间:2024/06/04 19:16
题目大意:给你一些珠子,每个珠子都会有两个数值,珠子与珠子之间能相连当且仅当它们的连接处数值相等,
问你能不能由这些珠子组成一条项链,即所有珠子都相连起来(包含头与尾)。
题目分析:这是一道关于欧拉回路的题目,我们可以把珠子与珠子连接处的两个数值抽象成一个点,然后可以试试几个样例发现这是 一条点与点之间只连一条线且从头到头的路径,是符合欧拉路径的定义的。
判断图中是否存在欧拉路径有两个要素:一、路径中所有点的度数都为偶数。二、图为连通。
这题默认图为连通,那么判定路径中的度数为偶数就可以了。
最后递归输出路径就可以了。
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<vector>using namespace std;int vis[100][100],deg[100],cnt;int N,temp;int record[1050];void dfs(int x){ for(int i=1;i<=50;i++) { if(vis[i][x]>0) { vis[x][i]--; vis[i][x]--; dfs(i); printf("%d %d\n",i,x); } }}int main(){ int T,case1=0; scanf("%d",&T); while(T--) { cnt=0; memset(vis,0,sizeof(vis)); memset(deg,0,sizeof(deg)); temp=0; scanf("%d",&N); int num=0; for(int i=0;i<N;i++) { int a,b; scanf("%d%d",&a,&b); vis[a][b]++; vis[b][a]++; deg[a]++; deg[b]++; } for(int i=1;i<=50;i++) { if(deg[i]&1) num++; } printf("Case #%d\n",++case1); if(num==0) { for(int i=1;i<=50;i++) dfs(i); } else printf("some beads may be lost\n"); if(T!=0) printf("\n"); } return 0;}
阅读全文
0 0
- uva10054-The Necklace(项链)
- The Necklace UVA10054
- UVA10054 The Necklace
- UVa10054 The Necklace
- The Necklace UVA10054
- uva10054 The Necklace
- UVA10054 The Necklace
- UVA10054-The Necklace
- The Necklace UVA10054
- UVa10054 The Necklace,无向图求欧拉回路
- UVa10054 The Necklace (欧拉回路)
- 【UVa10054】The Necklace【欧拉回路】
- UVA10054 The Necklace (输出欧拉回路)
- UVA10054 The Necklace 无向图欧拉回路+连通性
- uva10054 The Necklace (欧拉回路路径输出 (并查集 + DFS) || (DFS + stack))
- The Necklace
- uva10054
- UVA10054
- 归一化函数normalize详解
- iPhone X首批供应只有200-300万台;小蓝单车回应逾期未退押金;传摩拜成立网约车部门丨价值早报
- 厨师也需要仪式感,关键在于这把神器 | 钛空舱世界厨师日
- Mac下安装Scala
- 快速幂
- UVA10054-The Necklace
- 分享虚拟机VirtualBox安装win7系统完整步骤。
- 链表求和(LintCode)
- Android中EditText
- 【头条】风河Titanium Control:变革传统工控系统软件平台
- Python 基础知识之 list
- 最常见到的runtime exception 异常
- 翻转链表 给定一个链表个一个整数k 将从右边k个翻转到前边
- HTML入门8