Uva 10054 欧拉回路 打印路径
看是否有欧拉回路 有的话打印路径
欧拉回路存在的条件:
如果是有向图的话
1.底图必须是连通图
2.最多有两个点的入度不等于出度 且一个点的入度=出度+1 一个点的入度=出度-1
如果是无向图的话
1.如果这个无向图的连通的 当最多只有两个度数为奇数的点 就一定有欧拉回路
当有两个度数为奇数的点的时候 一个为起点 一个为终点
//============================================================================
// Name : UVA.cpp
// Author :
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================ #include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <map>
#include <vector>
using namespace std;
const int MAXN=;
int F[];
int find(int x)
{
if(F[x]==-)return x;
else return F[x]=find(F[x]);
}
void bing(int x,int y)
{
int t1=find(x);
int t2=find(y);
if(t1!=t2)F[t1]=t2;
}
int num[];
int G[][];
void Traverse(int u)
{
for(int v=;v<=;v++)
if(G[u][v]>)
{
G[u][v]--;
G[v][u]--;
Traverse(v);
printf("%d %d\n",v,u);
}
}
int main()
{
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
int T;
int n;
scanf("%d",&T);
int iCase=;
while(T--)
{
if(iCase>)printf("\n");
iCase++;
scanf("%d",&n);
int u,v;
memset(F,-,sizeof(F));
memset(num,,sizeof(num));
memset(G,,sizeof(G));
for(int i=;i<n;i++)
{
scanf("%d%d",&u,&v);
num[u]++;
num[v]++;
bing(u,v);
G[u][v]++;
G[v][u]++;
}
bool flag=true;
int temp=-;
for(int i=;i<=;i++)
{
if(num[i]==)continue;
if(num[i]%)
{
flag=false;
break;
}
if(temp==-)
{
temp=find(i);
continue;
}
if(temp!=find(i))
{
flag=false;
break;
}
}
printf("Case #%d\n",iCase);
if(!flag)
{
printf("some beads may be lost\n");
continue;
}
for(int i=;i<=;i++)
if(num[i]!=)
{
u=i;
break;
}
Traverse(u);
}
return ;
}
Uva 10054 欧拉回路 打印路径的更多相关文章
- John's trip(POJ1041+欧拉回路+打印路径)
题目链接:http://poj.org/problem?id=1041 题目: 题意:给你n条街道,m个路口,每次输入以0 0结束,给你的u v t分别表示路口u和v由t这条街道连接,要输出从起点出发 ...
- Watchcow(POJ2230+双向欧拉回路+打印路径)
题目链接:http://poj.org/problem?id=2230 题目: 题意:给你m条路径,求一条路径使得从1出发最后回到1,并满足每条路径都恰好被沿着正反两个方向经过一次. 思路:由于可以回 ...
- UVA 10054 (欧拉回路) The Necklace
题目:这里 题意:有一种由彩色珠子连接而成的项链,每个珠子两半由不同颜色(由1到50的数字表示颜色)组成,相邻的两个珠子在接触的地方颜色相同,现在有一些零碎的珠子,确认它是否能 复原成完整的项链. 把 ...
- What Goes Up UVA - 481 LIS+打印路径 【模板】
打印严格上升子序列: #include<iostream> #include<cstdio> #include<algorithm> #include<cst ...
- UVA 10054 The Necklace(欧拉回路,打印路径)
题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- uva 10054 The Necklac(欧拉回路)
明显的欧拉回路,把颜色作为点,建图后,做一遍欧拉回路.不过我是现学的,打印路径上纠结了一下,发现随着FindEuler()的递归调用的结束,不断把点压入栈中,从后向前打印,遇到"支路&quo ...
- UVa 103 - Stacking Boxes (LIS,打印路径)
链接:UVa 103 题意:给n维图形,它们的边长是{d1,d2,d3...dn}, 对于两个n维图形,求满足当中一个的全部边长 依照随意顺序都一一相应小于还有一个的边长,这种最长序列的个数,而且打 ...
- Uva 10131 Is Bigger Smarter? (LIS,打印路径)
option=com_onlinejudge&Itemid=8&page=show_problem&problem=1072">链接:UVa 10131 题意: ...
- 【欧拉回路】UVA - 10054 The Necklace
题目大意: 一个环被切割成了n个小块,每个小块有头尾两个关键字,表示颜色. 目标是判断给出的n个小块能否重构成环,能则输出一种可行解(按重构次序输出n个色块的头尾颜色).反之输出“some beads ...
随机推荐
- Android中@id与@+id区别和sharedUserId属性详解
Android中的组件需要用一个int类型的值来表示,这个值也就是组件标签中的id属性值. id属性只能接受资源类型的值,也就是必须以@开头的值,例如,@id/abc.@+id/xyz等. 如果在@后 ...
- PermissionUtils
import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; im ...
- 【Python】格式化输出json
参考文档: Python JSON JSON 函数 使用 JSON 函数需要导入 json 库:import json. 函数 描述 json.dumps 将 Python 对象编码成 JSON 字 ...
- git使用遇到的问题
1.我新建了一个django项目,然后又在git上新建了一个仓库,然后我在django的项目文件内,将git上的项目clone到这个文件内的时候 git clone https://gitee.com ...
- 正向代理与反向代理以及Nginx【总结】(转)
今天在了解Nginx的时候,涉及到反向代理的问题,看到一篇博文写的清晰明了,转载记录一下,后续继续学习,再次感谢博主的分享. 原文地址:https://www.cnblogs.com/Anker/p/ ...
- WPF图标拾取器
<Grid x:Name="LayoutRoot"> <Border BorderBrush="> <Border.Effect> & ...
- Kafka集群搭建和配置
Kafka配置优化 https://www.jianshu.com/p/f62099d174d9 1.安装&配置 下载tar包 解压后即可使用 修改配置文件 将server.propertie ...
- java并发编程 线程基础
java并发编程 线程基础 1. java中的多线程 java是天生多线程的,可以通过启动一个main方法,查看main方法启动的同时有多少线程同时启动 public class OnlyMain { ...
- PMP项目正常估算时间
最佳时间段+正常时间段*+最差时间段)/=正常估算时间. 项目经理小李对某活动工期进行估算时,发现人员的熟练程度和设备供应是否及时对工期至关重要.如果形成最有利组合时,预计17天可以完成:如果形成最不 ...
- 解决js跨域使用nginx配置问题
在server域中加入以下配置: #解决跨域问题 add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-C ...