欧拉回路

欧拉回路与欧拉路径

  • 欧拉回路 不重复地结果每条边的回路
  • 欧拉路径 不重复地几个每条边地路径
  • 欧拉图 存在欧拉回路地图
  • 半欧拉图 存在欧拉路径地图

在数学中为简单的图的一笔画完问题,但在有向图里,可以应用到单词接龙判断

判断是否存在欧拉回路

  • 无向图
  • 有向图
  • 混合图

无向图

欧拉回路

  • 连通
  • 每个顶点的入出度是偶数,则存在欧拉回路
    欧拉路径
  • 连通
  • 只有两个点地入出度为奇数
    这两个点为起点和终点

有向图

欧拉回路

  • 连通
  • 每个顶点的入度等于出度

欧拉路径

  • 连通
  • 某结点入度比出度大1,另一结点出度比入度大1;其余结点入度等于出度

混合图

既有有向图又有无向图

求无向图欧拉回路的算法

1.判断连通有两种方法,dfs和并查集

dfs复杂度O(n^2)
并查集

2.求度

例题

无向图判断欧拉回路

欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路?
Input
测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是节点数N ( 1 < N < 1000 )和边数M;随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个节点的编号(节点从1到N编号)。当N为0时输入结
束。
Output
每个测试用例的输出占一行,若欧拉回路存在则输出1,否则输出0。
Sample Input
3 3
1 2
1 3
2 3
3 2
1 2
2 3
0
Sample Output
1
0

dfs+degree

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn=1005;
int g[maxn][maxn];//邻接矩阵
int du[maxn];
int vis[maxn];
int n,m;void dfs(int m){//把与第一个结点相连接的所有结点都遍历vis[m]=1;for(int i=1;i<=n;i++){if(g[m][i]==1&&vis[i]==0){//对于每个结点相连接的点,判断是否没有走过dfs(i);//没走过就走}}
}int main(){while(scanf("%d",&n)!=0&&n){scanf("%d",&m);//初始化memset(vis,0,sizeof(vis));memset(g,0,sizeof(g));memset(du,0,sizeof(du));for(int i=0;i<m;i++){int u,v;scanf("%d%d",&u,&v);g[u][v]=g[v][u]=1;//邻接矩阵du[u]++;du[v]++;//度}dfs(1);int flag=1;for(int i=1;i<=n;i++){//连通的判断if(!vis[i]){flag=0;break;}//度的判断if(du[i]%2){flag=0;break;}}if(flag){printf("1\n");}else{printf("0\n");}}return 0;
}

并查集+度
边输入边进行合并操作,如果树的根为本身,则进行合并

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=1005;
int pre[maxn],dge[maxn];
int n,m;void init(){for(int i=1;i<=n;i++){dge[i]=0;pre[i]=i;}
}int find(int x){//寻找根while(x!=pre[x]){x=pre[x];}return x;
}void unio(int i,int j){pre[j]=find(i);
}int main(){while(scanf("%d",&n)!=EOF&&n){scanf("%d",&m);//初始化init();for(int i=0;i<m;i++){int u,v;scanf("%d%d",&u,&v);//度dge[u]++;dge[v]++;if(find(u)!=find(v)){//如果两个xxx,则合并为一个树unio(u,v);}}int flag=1;for(int i=1;i<=n;i++){//度的判断if(dge[i]%2){printf("0\n");flag=0;break;}}if(flag==0)continue;int x=pre[1];//树的根for(int i=2;i<=n;i++){if(x!=find(i)){flag=0;break;}}if(flag){printf("1\n");}else{printf("0\n");}}return 0;
}

有向图判断欧拉回路

Description
Some of the secret doors contain a very interesting word puzzle. The team of archaeologists has to solve it to open that doors. Because there is no other way to open the doors, the puzzle is very important for us.

There is a large number of magnetic plates on every door. Every plate has one word written on it. The plates must be arranged into a sequence in such a way that every word begins with the same letter as the previous word ends. For example, the word "acm" can be followed by the word "motorola". Your task is to write a computer program that will read the list of words and determine whether it is possible to arrange all of the plates in a sequence (according to the given rule) and consequently to open the door.
Input
The input consists of T test cases. The number of them (T) is given on the first line of the input file. Each test case begins with a line containing a single integer number Nthat indicates the number of plates (1 <= N <= 100000). Then exactly Nlines follow, each containing a single word. Each word contains at least two and at most 1000 lowercase characters, that means only letters 'a' through 'z' will appear in the word. The same word may appear several times in the list.
Output
Your program has to determine whether it is possible to arrange all the plates in a sequence such that the first letter of each word is equal to the last letter of the previous word. All the plates from the list must be used, each exactly once. The words mentioned several times must be used that number of times.
If there exists such an ordering of plates, your program should print the sentence "Ordering is possible.". Otherwise, output the sentence "The door cannot be opened.".
Sample Input
3
2
acm
ibm
3
acm
malform
mouse
2
ok
ok
Sample Output
The door cannot be opened.
Ordering is possible.
The door cannot be opened.

给一组单词,判断按一定顺序是否可以形成欧拉路径

代码

x笔画完???

X笔画判断: 奇点数为1及2以上的图,奇点数为N,则X=N整除2

本题其实就是考察简单半欧拉图及其扩展定理,设顶点的度数为连接的边数,然后统计所有顶点中度数为奇数的顶点的个数n,则答案一定为n/2。

首先,根据握手定理,所有顶点的度数之和一定为偶数。则奇数顶点的个数一定为偶数。然后每画一笔,最多可以使奇数顶点个数减少两个(或者不减少),所以一定至少要n/2笔,才能把画画完。

有一个特殊情况,即为所有点构成一个环的情况。此时n=0,但实际上需要一笔画完(即欧拉图),所以需要特判一下。

给定一个无向图,包含n 个顶点(编号1~n),m 条边,求最少用多少笔可以画出图中所有的边
第一行2个数n,m

以下m行 每行2个数a,b(a<>b) 表示a,b两点之间有一条边相连

一条边不会被描述多次

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,num;
int into[1010];
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){int u,v;scanf("%d%d",&u,&v);into[u]++;into[v]++;}for(int i=1;i<=n;i++){if(into[i]%2!=0){num++;}}if(num==0||num==2){cout<<"1";return 0;}else{cout<<num/2;}
}

附录:

vector的函数
push_back()在数组的最后添加一个数据
pop_back()在数组的最后删除一个数据
size()当前使用数据的大小
clear()清空当前的vector

转载于:https://www.cnblogs.com/Emcikem/p/11343780.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361490.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jQuery文档就绪

很多jQuery代码都有如下片段: $(document).ready(function(){//代码 })作用就是等文档结构加载完成后再去执行function中的代码&#xff0c;功能类似于window.onload事件。 代码实例如下: <!DOCTYPE html> <html> <head> <meta charset"utf-8"…

使用Java EE 7,WildFly和Docker进行连续部署–(第1部分)

此博客是开始一个新的hanginar&#xff08;G 结伴旅游 webi NAR&#xff09;&#xff0c;将突出解决方案&#xff0c;框架&#xff0c;应用服务器&#xff0c;工具&#xff0c;部署和更多的内容集中在Java EE的系列。 这些不是通常的会议风格独白演示&#xff0c;而是交互式ha…

URAL 1013 K-based Numbers. Version 3

URAL_1013 和URAL_1009的思路是一样的&#xff0c;只不过需要高精度&#xff0c;所以就直接用java写了。具体的一些思路可以参考我的URAL_1009的题解&#xff1a;http://www.cnblogs.com/staginner/archive/2012/05/01/2477513.html。 如果N再大一点的话&#xff0c;也可以用二…

爬取w3c课程—Urllib库使用

爬虫原理 浏览器获取网页内容的步骤&#xff1a;浏览器提交请求、下载网页代码、解析成页面&#xff0c;爬虫要做的就是&#xff1a; 模拟浏览器发送请求&#xff1a;通过HTTP库向目标站点发起请求Request&#xff0c;请求可以包含额外的header等信息&#xff0c;等待服务器响应…

关于SSL证书配置、升级的一些问题总结

SSL会成为网站、APP、小程序&#xff08;小程序已经强制使用https&#xff09;等项目的标配。关于SSL证书安装使用的问题今天总结下&#xff0c;以备用。 环境配置&#xff1a;windows server 2008 R2和IIS7.0 1、 安装SSL证书的环境 (温馨提示&#xff1a;安装证书前请先备份…

如何为JBoss Developer Studio 8设置集成和SOA工具

最新的JBoss Developer Studio&#xff08;JBDS&#xff09;的发布带来了有关如何开始使用尚未安装的各种JBoss Integration和BPM产品工具集的问题。 在本系列文章中&#xff0c;我们将为您概述如何安装每套工具并说明它们支持哪些产品。 这将有助于您在着手进行下一个JBoss集…

YUM常用命令介绍

1.列出所有可更新的软件清单命令&#xff1a;yum check-update 2.安装所有更新软件命令&#xff1a;yum update 3.仅安装指定的软件命令&#xff1a;yum install <package_name> 4.仅更新指定的软件命令&#xff1a;yum update <package_name> 5.列出所有可安裝的软…

WildFly 8的Camel子系统集成了Java EE –入门

就在三天前&#xff0c;围绕Thomas Diesler&#xff08; tdiesler &#xff09;的团队发布了WildFly-Camel子系统的2.0.0.CR1版本&#xff0c;它允许您将Camel Routes添加为WildFly配置的一部分。 路由可以部署为JavaEE应用程序的一部分。 JavaEE组件可以访问Camel Core API和各…

jQuery中国各个省份地图分部代码

jQuery中国各个省份地图分部代码 在线演示本地下载更多专业前端知识&#xff0c;请上 【猿2048】www.mk2048.com

封装axios的接口请求数据方法

lib文件夹中http.js文件的内容 包含了数据请求&#xff0c;路由的拦截&#xff0c;同时向外界暴露的是一个方法&#xff0c;方法内有三个参数&#xff0c;分别为请求的方式&#xff0c;地址&#xff0c;数据 1 import axios from axios;2 import qs from qs;3 4 const serverax…

Spring Boot Actuator:自定义端点,其顶部具有MVC层

Spring Boot Actuator端点允许您监视应用程序并与之交互。 Spring Boot包含许多内置端点&#xff0c;您也可以添加自己的端点。 添加自定义端点就像创建一个从org.springframework.boot.actuate.endpoint.AbstractEndpoint扩展的类一样容易。 但是Spring Boot Actuator也提供了…

jQuery自适应倒计时插件

jQuery自适应倒计时插件 在线演示本地下载更多专业前端知识&#xff0c;请上 【猿2048】www.mk2048.com

Linux三大共享文件的方法

1. Samba Samba 用于Linux 和windows之间的共享&#xff0c;ubuntu里面默认没有安装samba 在安装好samba之后&#xff0c;就用开始配置samba服务: Samba服务器主要配置文件为/etc/samba/smb.conf&#xff0c;并且可以将NetBIOS名与主机的对应关系写在/etc/samba /lmhosts文件中…

Unity3D实践系列03,使用Visual Studio编写脚本与调试

在Unity3D中&#xff0c;只有把脚本赋予Scene中的GameObject&#xff0c;脚本才会得以执行。 添加Camera类型的GameObject。 Unity3D默认使用"MonoDevelop"编辑器&#xff0c;这里&#xff0c;我想使用Visual Studio作为编辑器。 依次点击"Edit","Pre…

纯CSS3文字Loading动画特效

纯CSS3文字Loading动画特效是一款个性的loading文字加载动画。 在线演示本地下载更多专业前端知识&#xff0c;请上 【猿2048】www.mk2048.com

所有OSGi套件的通用CXF请求拦截器

几个月以来&#xff0c;我一直在研究Apache CXF&#xff0c;Karaf和Felix&#xff0c;我发现所有这些捆绑技术都非常有趣。 在处理一些用例时&#xff0c;我陷入一种情况&#xff0c;即我只需要一个Interceptor即可在发送到Karaf应用程序下部署的任何捆绑包的每个HTTP请求上执行…

通过init-connect + binlog 实现MySQL审计功能

背景&#xff1a; 假设这么一个情况&#xff0c;你是某公司mysql-DBA&#xff0c;某日突然公司数据库中的所有被人为删了。 尽管有数据备份&#xff0c;但是因服务停止而造成的损失上千万&#xff0c;现在公司需要查出那个做删除操作的人。 但是拥有数据库操作权限的人很多&…

AngularJS中ui-router全攻略

首先是angular-ui-router的基本用法。■ 如何引用依赖angular-ui-router angular.module(app,["ui.router"]).config(function($stateProvider){$stateProvider.state(stateName, stateCofig);}) ■ $stateProvider.state(stateName, stateConfig)stateName是string类…

如何为JBoss Developer Studio 8设置BPM和规则工具

最新的JBoss Developer Studio&#xff08;JBDS&#xff09;的发布带来了有关如何开始使用尚未安装的各种JBoss Integration和BPM产品工具集的问题。 在本系列文章中&#xff0c;我们将为您概述如何安装每套工具并说明它们支持哪些产品。 这将有助于您在着手进行下一个JBoss集…

基于HTML5陀螺仪实现ofo首页眼睛移动效果

最近用ofo小黄车App的时候&#xff0c;发现以前下方扫一扫变成了一个眼睛动的小黄人&#xff0c;觉得蛮有意思的&#xff0c;这里用HTML5仿一下效果。 ofo眼睛效果 效果分析 从效果中不难看出&#xff0c;是使用陀螺仪事件实现的。 这里先来看一下HTML5中陀螺仪事件的一些概…