首页 > 其他分享 >欧拉路径

欧拉路径

时间:2024-08-13 20:05:57浏览次数:6  
标签:int 路径 long define 欧拉 out

借鉴文章
\(1\). 欧拉路径定义
图中经过所有边恰好一次的路径叫欧拉路径(也就是一笔画)。如果此路径的起点终点相同,则称其为一条欧拉回路
\(2.\) 欧拉路径判定(是否存在)

  • 有向图欧拉路径:图中恰好存在 \(1\) 个点出度比入度多 \(1\)(这个点即为 起点 \(S\)),\(1\) 个点入度比出度多 \(1\)(这个点即为 终点 \(T\)),其余节点出度=入度。

  • 有向图欧拉回路所有点的入度=出度(起点 \(S\) 和终点 \(T\) 可以为任意点)。

  • 无向图欧拉路径:图中恰好存在 \(2\) 个点的度数是奇数,其余节点的度数为偶数,这两个度数为奇数的点即为欧拉路径的 起点 \(S\) 和 终点 \(T\)。

  • 无向图欧拉回路所有点的度数都是偶数(起点 \(S\) 和终点 \(T\) 可以为任意点)。

注:存在欧拉回路(即满足存在欧拉回路的条件),也一定存在欧拉路径。

当然,一副图有欧拉路径,还必须满足将它的有向边视为无向边后它是连通的(不考虑度为 \(0\) 的孤立点),连通性的判断我们可以使用并查集dfs 等。

例题

欧拉路径

点击查看代码
#include <bits/stdc++.h>
#define speed() ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); 
#define ll long long
#define pb push_back
#define ull unsigned long long
#define pii pair<int,int>
#define lid (rt<<1)
#define rid (rt<<1|1)
using namespace std;
const int N = 1e5+5;
std::vector<int> edge[N];
int n,m;
int in[N],out[N],cnt[2],del[N];
stack <int> sta;bool vis[N];
int main()
{
	speed();
   // freopen("in.in","r",stdin);
    // freopen("out.out","w",stdout);
	cin>>n>>m;
	int u,v;
	for(int i=1;i<=m;i++)
	{
		cin>>u>>v;
		edge[u].push_back(v);
		out[u]++;in[v]++;
	}
	for(int i=1;i<=n;i++) sort(edge[i].begin(),edge[i].end());
	bool equal=1;int st=1;//注意默认起点
	for(int i=1;i<=n;i++)
	{
		if(out[i]!=in[i])
		{
			equal=0;
			if(out[i]-in[i]==1)cnt[1]++,st=i;
			else if(in[i]-out[i]==1)cnt[0]++;
			else return cout<<"No"<<endl,0;
		}
	}
	if((!equal)&&!(cnt[0]==cnt[1]&&cnt[0]==1)) return cout<<"No"<<endl,0;
	auto dfs=[&](auto dfs,int u) ->void{
		for(int i=del[u];i<edge[u].size();i=del[u])
		{
			del[u]=i+1;int to=edge[u][i];
			dfs(dfs,to);
		}
		sta.push(u);
	};
	dfs(dfs,st);
	while(sta.size())cout<<sta.top()<<" ",sta.pop();
	return 0;
}

骑马修栅栏

点击查看代码
#include <bits/stdc++.h>
#define speed() ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); 
#define ll long long
#define pb push_back
#define ull unsigned long long
#define pii pair<int,int>
#define lid (rt<<1)
#define rid (rt<<1|1)
using namespace std;
const int N = 1e4+5;
std::vector<int> edge[N];
int n,m;
int du[N],mp[N][N],st;
stack <int> sta;bool vis[N];
int mi=1e9;
int main()
{
	speed();
    // freopen("in.in","r",stdin);
    // freopen("out.out","w",stdout);
	cin>>m;
	int u,v;
	for(int i=1;i<=m;i++)
	{
		cin>>u>>v;
		mp[u][v]++;mp[v][u]++;
		du[u]++;du[v]++;
		n=max(n,u);n=max(n,v);
		mi=min(u,mi);mi=min(mi,v);
	}
	st=mi;//注意默认起点
	for(int i=1;i<=n;i++)
	{
		du[i]%2?({st=i;break;}):({continue;});
	}
	auto dfs=[&](auto dfs,int u) ->void{
		for(int i=1;i<=n;i++)
		{
			if(mp[u][i])
			{
				mp[u][i]--;
				mp[i][u]--;
				dfs(dfs,i);
			}
		}
		sta.push(u);
	};
	dfs(dfs,st);
	while(sta.size())cout<<sta.top()<<endl,sta.pop();
	return 0;
}

标签:int,路径,long,define,欧拉,out
From: https://www.cnblogs.com/wlesq/p/18357551

相关文章

  • python实现迷宫最佳路径规划
    在Python中实现迷宫路径的最佳路径规划,我们通常可以使用图搜索算法,如广度优先搜索(BFS)或更高效的A搜索算法。A算法因其结合了最佳优先搜索(如Dijkstra算法)和启发式信息(如曼哈顿距离或欧几里得距离)来评估节点的潜力,所以在寻找最短路径时非常有效。下面将展示如何使用A*算法在Pyth......
  • 改变IntelliJ IDEA 中的system和config/plugins的默认C盘的路径
    1,问题,在为idea在线安装插件时,如JProfiler,会默认安装到C盘,而本人则是希望安装到软件所在的D盘目录下,那么如何修改呢:C:\Users\xxx.IntelliJIdea\config\plugins2,修改方法:打开IntelliJIDEA的安装目录,如本人的为D:\JetBrains\IntelliJIDEA2018.2然后在bin目录下找到idea.pr......
  • 修改『Visual Studio Code(VS Code)』插件默认安装路径的方法
    前言作者希望将『VisualStudioCode(以下简称为“VSCode”)』的插件安装在数据盘(D盘),用于统一管理,因此需要修改VSCode插件安装路径。VSCode插件默认的安装位置为:C:\Users\{个人用户名}\.vscode\extensions。方法一:修改快捷方式目标路径(★★☆)1.确保『code』快捷命令的可用......
  • Visual Studio 修改NuGet 包路径
    目的:通过NuGet安装包时,NuGet先将包下载至一个统一的目录,默认路径是:C:\Users\{用户名}\.nuget\packages。现在需要将其迁移到目录E:\nuget\packages步骤1、在C:\ProgramFiles(x86)\NuGet\Config目录中找到Microsoft.VisualStudio.Offline.config。在文件末尾添加一......
  • 算法力扣刷题记录 七十七【63. 不同路径 II】
    前言动态规划第6篇。记录七十七【63.不同路径II】一、题目阅读一个机器人位于一个mxn网格的左上角(起始点在下图中标记为“Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那......
  • BGP路径属性(三)
    BGP路径属性作用:用于选路和防环,任何一条BGP路由都拥有多个路径属性分类:公认:所有BGP路由器必须识别公认必遵:必须包括在每个Update消息中,如:Origin、AS_Path、Next_hop公认任意:可能包含在某些Update消息中,如:Local_preference、Atomic_aggregate可选:厂商实现自己私有特性......
  • 欧拉系列
    欧拉系列欧拉函数欧拉函数\(\varphi(n)\)表示\(1\simn\)内与\(n\)互质的数的个数。性质欧拉函数是积性函数,特别的有\(\varphi(2n)=\varphi(n)\)。\(\sum_{d|n}\varphi(d)=n\)。证明:设\(f(x)\)表示\(\gcd(k,n)=x(k\in[1,n])\)的个数,则\(n=......
  • cmake里常见有关输出路径的变量
    参考资料[cmake-variables](cmake-variables(7)—CMake3.30.2Documentation)常见有关输出路径的变量变量(均可跟_来区分Debug和Release)Windows其他操作系统CMAKE_ARCHIVE_OUTPUT_DIRECTORY静态库.lib文件待补充CMAKE_RUNTIME_OUTPUT_DIRECTORY动态库.dll......
  • 「Day 5—最短路径」
    最短路问题单源最短路全源最短路Floyd算法通过转移方程判断i->j的路径中,是否有i->k->j更短,运用简单dp来转移状态。f[i][j]表示i->j的最短路径长度。但不要忘了初始化,一个点到其本身的最短路径为1,即f[i][i]=1,其余的初始化为'1e9'即可。for(inti=......
  • 【学习笔记】Matlab和python双语言的学习(图论最短路径)
    文章目录前言一、图论基本概念示例二、代码实现----Matlab三、代码实现----python总结前言通过模型算法,熟练对Matlab和python的应用。学习视频链接:https://www.bilibili.com/video/BV1EK41187QF?p=36&vd_source=67471d3a1b4f517b7a7964093e62f7e6一、图论图论(G......