SGU101 求有重边的无向图欧拉迹
题意:好多木棒,俩端有数字(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 求有重边的无向图欧拉迹的更多相关文章
- POJ--1300--Door Man【推断无向图欧拉通路】
链接:http://poj.org/problem?id=1300 题意:有n个房间.每一个房间有若干个门和别的房间相连.管家从m房间開始走.要回到自己的住处(0),问是否有一条路能够走遍全部的门而且 ...
- 求一个极大数的欧拉函数 phi(i)
思路: 因为当n>=1e10的时候,线性筛就不好使啦.所以要用一个公式 φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn) 证明详见:<公式 ...
- 【poj2478-Farey Sequence】递推求欧拉函数-欧拉函数的几个性质和推论
http://poj.org/problem?id=2478 题意:给定一个数x,求<=x的数的欧拉函数值的和.(x<=10^6) 题解:数据范围比较大,像poj1248一样的做法是不可行 ...
- 筛法求欧拉函数(poj2478
求1-n的欧拉函数的值 #include <iostream> #include <cstdio> #include <queue> #include <al ...
- The Best Path HDU - 5883 欧拉通路
图(无向图或有向图)中恰好通过所有边一次且经过所有顶点的的通路成为欧拉通路,图中恰好通过所有边一次且经过所有顶点的回路称为欧拉回路,具有欧拉回路的图称为欧拉图,具有欧拉通路而无欧拉回路的图称为半欧拉图 ...
- codeforces 1009D Relatively Prime Graph【欧拉函数】
题目:戳这里 题意:要求构成有n个点,m条边的无向图,满足每条边上的两点互质. 解题思路: 显然1~n这n个点能构成边的条数,就是2~n欧拉函数之和(x的欧拉函数值代表小于x且与x互质的数的个数. 因 ...
- COGS2531. [HZOI 2016]函数的美 打表+欧拉函数
题目:http://cogs.pw/cogs/problem/problem.php?pid=2533 这道题考察打表观察规律. 发现对f的定义实际是递归式的 f(n,k) = f(0,f(n-1,k ...
- HDU 2824 简单欧拉函数
1.HDU 2824 The Euler function 2.链接:http://acm.hdu.edu.cn/showproblem.php?pid=2824 3.总结:欧拉函数 题意:求(a ...
- HDU5597/BestCoder Round #66 (div.2) GTW likes function 打表欧拉函数
GTW likes function Memory Limit: 131072/131072 K (Java/Others) 问题描述 现在给出下列两个定义: f(x)=f_{0}(x)=\ ...
随机推荐
- laydate控件后台返回的时间前台格式化
//功能:laydate控件后台返回的时间前台格式化 //参数:laydate控件值 function formatDate(strTime) { if ("" === strTi ...
- PAT (Advanced Level) Practise - 1099. Build A Binary Search Tree (30)
http://www.patest.cn/contests/pat-a-practise/1099 A Binary Search Tree (BST) is recursively defined ...
- vue-router介绍及简单使用
一.vue-router介绍 vue-router是vue官方提供的一个路由框架,控制页面路由,使用较为方便. 1.路由模式 hash(浏览器环境默认值),使用 URL hash 值来作路由,支持所有 ...
- Kafka创建&查看topic,生产&消费指定topic消息
启动zookeeper和Kafka之后,进入kafka目录(安装/启动kafka参考前面一章:https://www.cnblogs.com/cici20166/p/9425613.html) 1.创 ...
- Perl学习之四:语句
语句:if/unless while/foreach/do..while/for 1.表达式真价值总结任何表达式都有真假值:逻辑.字符串.列表.文件 2.if if(expression1){ sta ...
- 【xdebug】 windows xdebug 配置
[xdebug] zend_extension = C:\phpStudy\php53n\ext\php_xdebug-2.6.1-7.0-vc14-nts-x86_64.dllxdebug.idek ...
- python--前端CSS
一.CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义了如何显示HTML元素,给HTML设置样式,让他更加美观. 当浏览器读到这个样式表, 他就会按照这个样式来对文档进行 ...
- PAT Basic 1031
1031 查验身份证(15)(15 分) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8, ...
- vuex相关知识点
vuex简单理解转载博客 vuex从入门到入门------state:从 store 实例中读取状态最简单的方法就是在计算属性中返回某个状态------Getters:可以很容易地在任何组件中使用它- ...
- 大数据学习——Storm学习单词计数案例
需求:计算单词在文档中出现的次数,每出现一次就累加一次 遇到的问题 这个问题是<scope>provided</scope>作用域问题 https://www.cnblogs. ...