题意:好多木棒,俩端有数字(0--6)标记,按数字相同的端首尾相连成一条直线(木棒可以相同)。即求有重边的无向图欧拉迹。

先判定是否为欧拉图,俩个条件,不说了。如果是欧拉图,输出路经。

方法:dfs遍历边,回溯时候记录边,遍历过了就标记“双向边”.

那么所记录的恰好是一条逆欧拉迹。不可以前进的时候标记,原因:有可能一笔画失败,导致边不连续,

而回溯的时候记录,原因较复杂,大致证明如下:

分几种情况讨论即可:

1,只有偶数结点。任选一个点,必然从一条出发回到该点,直到无边为止,回溯时边自然连续。

2,有2个奇数结点。当回到某个点时无论圈有没走,必然也连续,见图:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n;int nume=0;
int e[205][2];int head[10];
void adde(int f,int l)
{
e[nume][0]=l;e[nume][1]=head[f];head[f]=nume++;
e[nume][0]=f;e[nume][1]=head[l];head[l]=nume++;
}
int degree[8]; //度数
int vis[205]; //标记访问
void dfs1(int u) //判断连通
{
for(int i=head[u];i!=-1;i=e[i][1])
{
int v=e[i][0];
if(!vis[v])
{
vis[v]=1;
dfs1(v);
}
}
}
int ans[205][2];int ansnum=0;
void dfs2(int u) //求欧拉迹
{
for(int i=head[u];i!=-1;i=e[i][1])
{
if(!vis[i])
{
vis[i]=1; //此处同时标记双向边!!!。
vis[i^1]=1;
int v=e[i][0];
dfs2(v); //回溯的时候记录边,恰是一条欧拉路。
if(i%2==0)
ans[ansnum++][0]=i/2+1;
else
ans[ansnum++][1]=i/2+1; }
}
}
int main()
{
scanf("%d",&n);
for(int i=0;i<8;i++)
head[i]=-1;
int tf,tl;
int tbegin=0;
for(int i=0;i<n;i++)
{
scanf("%d%d",&tf,&tl);
tbegin=tf;
degree[tf]++;degree[tl]++;
adde(tf,tl);
}
int count=0;
int jis=0;;
for(int i=0;i<=6;i++) //度数判定
{
if(degree[i]%2)
{
count++;
jis=i;
}
}
if(count==0||count==2)
{
int mark=1;
vis[tbegin]=1;
dfs1(tbegin);
for(int i=0;i<=6;i++) //连通性判定
if(vis[i]==0&°ree[i]>0)
mark=0;
if(mark==0){ printf("No solution\n");return 0;}
for(int i=0;i<205;i++)
vis[i]=0;
if(count==0)
dfs2(tbegin);
else
dfs2(jis);
for(int i=ansnum-1;i>=0;i--) //逆序输出
{
if(ans[i][0]!=0)
printf("%d +\n",ans[i][0]);
else
printf("%d -\n",ans[i][1]);
}
}
else
printf("No solution\n"); }

SGU101 求有重边的无向图欧拉迹的更多相关文章

  1. POJ--1300--Door Man【推断无向图欧拉通路】

    链接:http://poj.org/problem?id=1300 题意:有n个房间.每一个房间有若干个门和别的房间相连.管家从m房间開始走.要回到自己的住处(0),问是否有一条路能够走遍全部的门而且 ...

  2. 求一个极大数的欧拉函数 phi(i)

    思路: 因为当n>=1e10的时候,线性筛就不好使啦.所以要用一个公式 φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn) 证明详见:<公式 ...

  3. 【poj2478-Farey Sequence】递推求欧拉函数-欧拉函数的几个性质和推论

    http://poj.org/problem?id=2478 题意:给定一个数x,求<=x的数的欧拉函数值的和.(x<=10^6) 题解:数据范围比较大,像poj1248一样的做法是不可行 ...

  4. 筛法求欧拉函数(poj2478

    求1-n的欧拉函数的值 #include <iostream> #include <cstdio> #include <queue> #include <al ...

  5. The Best Path HDU - 5883 欧拉通路

    图(无向图或有向图)中恰好通过所有边一次且经过所有顶点的的通路成为欧拉通路,图中恰好通过所有边一次且经过所有顶点的回路称为欧拉回路,具有欧拉回路的图称为欧拉图,具有欧拉通路而无欧拉回路的图称为半欧拉图 ...

  6. codeforces 1009D Relatively Prime Graph【欧拉函数】

    题目:戳这里 题意:要求构成有n个点,m条边的无向图,满足每条边上的两点互质. 解题思路: 显然1~n这n个点能构成边的条数,就是2~n欧拉函数之和(x的欧拉函数值代表小于x且与x互质的数的个数. 因 ...

  7. COGS2531. [HZOI 2016]函数的美 打表+欧拉函数

    题目:http://cogs.pw/cogs/problem/problem.php?pid=2533 这道题考察打表观察规律. 发现对f的定义实际是递归式的 f(n,k) = f(0,f(n-1,k ...

  8. HDU 2824 简单欧拉函数

    1.HDU 2824   The Euler function 2.链接:http://acm.hdu.edu.cn/showproblem.php?pid=2824 3.总结:欧拉函数 题意:求(a ...

  9. HDU5597/BestCoder Round #66 (div.2) GTW likes function 打表欧拉函数

    GTW likes function      Memory Limit: 131072/131072 K (Java/Others) 问题描述 现在给出下列两个定义: f(x)=f_{0}(x)=\ ...

随机推荐

  1. gson对象的相互转换

    参见 http://www.javacreed.com/gson-deserialiser-example/

  2. 前台解析json的方法

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...

  3. 稳定性 耗时 gc 过长问题排查 和工具

    自己的另外一篇: http://www.cnblogs.com/fei33423/p/7805186.html 偶有耗时抖动? gc 也有长耗时? fullgc 也是? 有同学反馈 swap 可能导致 ...

  4. vue父组件获取子组件页面的数组 以城市三级联动为例

    父组件调用子组件 <Cselect ref="registerAddress"></Cselect> import Cselect from '../../ ...

  5. perl学习之I/O基础

    1.从标准输入进行输入<STDIN> 2.从钻石操作符进行输入<> 3.参数调用@ARGV 4.向标准输出进行输出 5.用printf进行格式化输出 1.<STDIN&g ...

  6. **没有规则可以创建“XXX”需要的目标“XXX”问题的解决方案

    一.现象 我将之前Redhat9.0编译好的uboot,转到ubuntu12.04环境.在ubuntu环境下对 uboot重新编译提示错误.编译过程如下: root@hailin-virtual-ma ...

  7. 【转】Hive over HBase和Hive over HDFS性能比较分析

    转载:http://lxw1234.com/archives/2015/04/101.htm 环境配置: hadoop-2.0.0-cdh4.3.0 (4 nodes, 24G mem/node) h ...

  8. 【转】数据仓库ODS、DW和DM概念区分

    今天看了一些专业的解释,还是对ODS.DW和DM认识不深刻,下班后花时间分别查了查它们的概念. ODS——操作性数据 DW——数据仓库 DM——数据集市 1.数据中心整体架构   数据中心整体架构 数 ...

  9. Python包,json&pickle,time&datetime,random模块

    补充内容: 解决模块循环导入的两种方法:(不得已而为之,表示程序结构不够严谨) 将导入模块语句放在文件最下方 保证语句导入之前函数内代码能够被执行 将导入语句放进函数体内 使其不影响整个函数的运行 包 ...

  10. 我的Python分析成长之路5

    一.装饰器: 本质是函数,装饰其他函数,为其他函数添加附加功能. 原则: 1.不能修改被装饰函数的源代码. 2.不能修改被装饰函数的调用方式. 装饰器用到的知识: 1.函数即变量   (把函数体赋值给 ...