数据结构:图论:欧拉回路!一笔画问题

从无向图中的一个结点出发走出一条道路,每条边恰好经过一次。这样的路线称为欧拉道路。

奇点的概念:一个点的度数为奇数的时候,这个点就称为:奇点。

无向图中结论:

不难发现,在欧拉道路中,除了起点跟终点,其他所有点的度数都应该是偶数!

如果一个无向图是连通的,且最多只有两个奇点,则一定存在欧拉道路。

如果有两个奇点,则必须从其中一个出发,然后从另外一个终止。

如果不存在奇点,则可以从任意点出发,最终一定会回到原点(这样的欧拉道路又称为欧拉回路)。

有向图中结论:

前提:在忽略边的方向后,图必须是连通的。

最多只能有两个点为奇点,而且必须是其中一个点的出度恰好比入度大一(这个点用来作为起点);另外一个入度比出度大一(这个点用来作为终点)。

#include <iostream>
#include <string>
#include <stack>

#define MAXN 1000

using namespace std;

int G[MAXN][MAXN], vis[MAXN][MAXN];
stack<string> s;
int n, m;

void dfs(int u){
	for(int v = 0; v < n; ++v) if(G[u][v] && !vis[u][v]){
		vis[u][v] = vis[v][u] = 1;
		//vis[u][v] = 1; 有向图
		dfs(v);
		string a(1, u+'0');
		string b(1, v+'0');
		string str(a + "->" + b);
		s.push(str);
	}
}

int main(){
	cin >> n >> m;
	memset(G, 0, sizeof(G));
	memset(vis, 0, sizeof(vis));
	for(int i = 0; i < m; ++i){
		int u, v;
		cin >> u >> v;
		G[u][v] = G[v][u] = 1;//无向图
		//G[u][v] = 1; 有向图
	}
	dfs(0);
	while(!s.empty()){
		cout << s.top() << endl;
		s.pop();
	}
	return 0;
}

数据结构:图论:欧拉回路!一笔画问题

时间: 2024-11-03 22:31:51

数据结构:图论:欧拉回路!一笔画问题的相关文章

Codeforces 723e [图论][欧拉回路]

/* 不要低头,不要放弃,不要气馁,不要慌张. 题意: 给你一个有n个点,m条边的无向图,给每条边规定一个方向,使得这个图变成有向图,并且使得尽可能多的点入度与出度相同. 输出有多少个这样的点并且输出有向图. 思路: 1.针对每个连通分支. 2.所有点入度与出度相同,显然这是欧拉回路存在的判定定理,但是欧拉回路的另外一个等价定理是所有点的度数是偶数.那如果给我们的图中的某些点是奇数度该怎么办. 3.显然原图中给的点如果度数是奇数,那么该点的入度与出度一定不相同. 4.根据握手定理,无向图中度数是

【数据结构】第六章学习小结--- 图

在第十一和第十二周的学习中,我了解到了有关图的一些知识,图是一种比线性表和树更为复杂的数据结构,她不像线性表一样,数据元素之间具有线性关系,每个元素对应一个前驱和一个后继,她也不像树一样,数据元素之间有明显的层次关系,简而言之,在图结构中,结点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关.感觉自己这一周有点松懈了,pta上面的题目都只是看一遍题目觉得不会就去翻书,或是求助同学,缺少独立思考!!!欸,还是先讲讲有关图的一些基本知识吧. 1. 图的定义 图是由顶点的有穷非空集合和顶点之

C_C++学习进度

C/C++基础班  1个月 1.1初识C语言 1.2数据类型与运算符 1.3流程控制 1.4函数 1.5指针 1.6指针与字符串 1.7内存布局 1.8结构体和共用体 1.9文件操作 1.10实战一电子词典 1.11实战二跨平台IDE C/C++就业班 4.5个月   2.1 C语言提高 C语言基础复习(数据类型.变量.内存布局.指针基础): C语言基础强化提高(C语言中的字符串.一维数组.二维数组): C语言基础强化提高(一级指针,二级指针,三级指针实战,N级指针概念,指针与数组): C语言基

面试高级算法梳理笔记

面试高级算法梳理笔记 1.1 说明 本篇为<挑战程序设计竞赛(第2版)>读书笔记系列,旨在: 梳理算法逻辑 探索优化思路 深入代码细节 1.2 目录 原文首发于个人博客Jennica.Space,按算法难度划分为初中高三个级别,详细目录及链接如下: 初级篇 穷竭搜索 贪心 动态规划 数据结构 图论 数论 中级篇 二分搜索 常用技巧 数据结构(二) 动态规划(二) 网络流 计算几何 高级篇 数论(二) 博弈论 图论(二) 常用技巧(二) 智慧搜索 分治 字符串 1.3 题解 配套习题及详解同步发

C++强化学习规划表

第一阶段 C语言加强以及C++语言详解(29天) 课程名称 课程内容 学习目标 C语言强化 · C语言基础复习(数据类型.变量.内存布局.指针基础) · C语言基础强化提高(C语言中的字符串.一维数组.二维数组) · C语言基础强化提高(一级指针,二级指针,三级指针实战,N级指针概念,指针数组和数组指针) · C语言基础强化提高(结构体.文件的使用) · 动态库的封装和设计 · 函数指针回调函数 · C语言面试题强化与提高 在基础班C语言知识点之上,掌握C语言深入技巧,为日后 做更大的项目打下坚

结构(图的遍历)

一.深度优先遍历和广度优先遍历( DFS && BFS ) [深度优先] 0->3->1->2->4 1.从0开始,首先找到0的关联顶点3 2.由3出发,找到1:由1出发,没有关联的顶点. 3.回到3,从3出发,找到2:由2出发,没有关联的顶点. 4.回到4,出4出发,找到1,因为1已经被访问过了,所以不访问. [深度优先练习] 0->1->3->7->4->2->5->6 [广度优先]A->B->F->C

(转)sicily题目分类

Sicily题目分类 ·         [数据结构/图论] 1310 Right-Heavy Tree   笛卡尔树相关,复杂度O(N)或O(NlogN). ·1426 Phone List         电话号码前缀检索,trie树相关. ·1443 Printer Queue      基本队列操作. ·1149 等价表达式         判断表达式是否等价(递归求解) ·1136 山海经             n长序列里求m次区间询问的最大连续子区间和.线段树/RMQ ·1252

欧拉图详解

欧拉图详解 通过图(无向图或有向图)中所有边一次且仅一次行遍图中所有顶点的通路称为欧拉通路,通过图中所有边一次且仅一次行遍所有顶点的回路称为欧拉回路.具有欧拉回路的图称为欧拉图(Euler Graph),具有欧拉通路而无欧拉回路的图称为半欧拉图. 1 定义 欧拉通路(Euler tour)--通过图中每条边一次且仅一次,并且过每一顶点的通路. 欧拉回路 (Eulercircuit)--通过图中每条边一次且仅一次,并且过每一顶点的回路. 2 无向图是否具有欧拉通路或回路的判定 G有欧拉通路的充分必

置顶博文

欢迎来到我的博客 执灯把酒看见 归来仍是少年 简介 原产地:浙江衢州 生产日期:2004.10 生产编号:CYW 常用ID:Martian148 一个热爱文学的理科生 关于我 我就读于九线城市的一所中学兴华中学 我相貌平平,成绩平平 热爱数学,数据结构,服务器编程以及前段开发 是一位OIer 联系方式 QQ: 1485868106 Blog: 博客园 Mail: [email protected] 近期目标 考上九线城市衢州最好的中学衢州二中 NOIP2019PJ浙江省一等奖 博文索引 序 学习

PAT(甲级)2017年春季考试

PAT(甲级)2017年春季考试 C题图论欧拉回路,还没写,因为太饿了,待补 A.Raffle for Weibo Followers #include<bits/stdc++.h> using namespace std; int m,n,s; vector<string> person; set<string> se; vector<string> ans; int main(){ cin>>m>>n>>s; for(