首页 > 其他分享 >欧拉图、欧拉路径、欧拉回路

欧拉图、欧拉路径、欧拉回路

时间:2024-07-22 09:06:46浏览次数:13  
标签:head int 路径 dfs ++ 回路 欧拉

P7771 【模板】欧拉路径

欧拉路径的模板题。

思路

首先判断是否有欧拉路径,然后排序,找出起点,最后 dfs 找路径。

代码

细节多,比如要判断一个点是否存在(这个题目不需要)。

#include <bits/stdc++.h>

using namespace std;

const int N = 100010;

vector<int> e[N];
int head[N], in[N], out[N];

void add(int u, int v) {
	in[v]++, out[u]++;
	e[u].push_back(v);
}

int n, m;

vector<int> ans; // 倒序存储

void dfs(int u) {
	for (int i = head[u]; i < e[u].size(); i = head[u]) {
		head[u]++; 
		dfs(e[u][i]);
	}
	ans.push_back(u);
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	cin >> n >> m;
	for (int i = 1; i <= m; i++) {
		int u, v;
		cin >> u >> v;
		add(u, v);
	}

	int cnt1 = 0, cnt2 = 0, st = -1;

	for (int i = 1; i <= n; i++) {
		if (in[i] - out[i] == 1) cnt1++;
		else if (out[i] - in[i] == 1) cnt2++, st = i;
	}

	if (!((cnt1 == 1 && cnt2 == 1) || (cnt1 == 0 && cnt2 == 0))) {// 判断是否有欧拉回路
		cout << "No\n";
		return 0;
	}
	for (int i = 1; i <= n; i++) sort(e[i].begin(), e[i].end());// 排序
	if (st == -1) { // 欧拉回路要特殊处理起点
		for (int i = 1; i <= n; i++) {
			if (in[i] || out[i]) {
				st = i;
				break;
			}
		}
	}
	dfs(st);
	for (int i = ans.size() - 1; i >= 0; i--) cout << ans[i] << ' ';
	return 0;
}

标签:head,int,路径,dfs,++,回路,欧拉
From: https://www.cnblogs.com/Yuan-Jiawei/p/18315340

相关文章

  • Loj P10064 黑暗城堡 题解 最短路径树记数
    这道题是一道最短路径树问题。首先,什么是最短路径树呢?定义一个图的最短路径树表示一个图上的生成树,且根节点到图上任一点的距离等于原图上两者之间的距离。而不难发现,题目其实是在求图上最短路径树记数。首先,建出最短路径树。枚举每条边,判断边两个端点到根的距离之差是否为......
  • (7-4-03)RRT算法:基于Gazebo仿真的路径规划系统(3)
    (6)函数select_branch实现了RRT_*_FND算法中的选择分支策略,用于删除不再位于路径上的节点及其子节点。它接收当前达到的节点以及先前的路径作为输入,并根据路径更新图中的节点和边。随着节点的移除,函数会实时显示图的变化。最后,它返回更新后的路径。defselect_branch(G:Graph,......
  • 如何在 Windows 中获取 virtualenv 的路径?
    首先,我在Windows中使用Bash。我正在尝试在VSCode中编写virtualenv的正确路径,但我一定做错了什么。"python.pythonPath":"C\\Users\\Angel\\AppData\\Local\\Packages\\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\\LocalState\\rootfs\\home\......
  • CCStheia添加include路径
    一、在系统内找到该路径二、复制该路径,并更改写法C:\Users\c1519\workspace_ccstheia\OLED\user_lib改为:C:/Users/c1519/workspace_ccstheia/OLED/user_lib三、将路径添加入include设置......
  • PowerShell 命令来操作 Windows 注册表 Get-ItemProperty 命令可以获取指定注册表路径
    PowerShell提供了一些命令和方法来操作Windows注册表。以下是一些常用的PowerShell命令和示例:1.获取注册表项的值使用Get-ItemProperty命令可以获取指定注册表路径下的键值信息。powershellCopyCode#获取注册表项的值Get-ItemProperty-Path"HKCU:\Software\Micro......
  • 使用三次或五次多项式生成约束路径
    我需要编写一个程序来使用三次/五次多项式生成路径。我编写了以下代码来生成3D空间的路径。它绘制一条路径(使用三次多项式),并对起点、目标点、初始速度和目标速度进行约束。importnumpyasnpimportmatplotlib.pyplotaspltdefcubic_trajectory(x0,xf,v0,vf,T......
  • Picovoice Porcupine 自定义唤醒词不起作用,文件路径问题
    我在picovoice网站上训练了自定义唤醒词并下载了ZIP文件。然后我将其解压并复制文件路径。这是我的代码:importstructimportpyaudioimportpvporcupineporcupine=Nonepaud=Noneaudio_stream=Nonetry:porcupine=pvporcupine.create(access_key="blahblah",keyw......
  • 代码随想录算法训练营第十五天 | 110.平衡二叉树、257. 二叉树的所有路径 、404.左叶
    110.平衡二叉树题目:.-力扣(LeetCode)思路:后序遍历计算高度代码:/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*......
  • Python; Django 添加字符到路径名导致操作系统错误 22
    我一直在尝试让django渲染我创建的模板。起初它说模板不存在,但是一旦我修复了错误,它现在就会向路径添加字符,并且因此找不到模板。路径应该是:C:\\Users\\ABC\\Desktop\\science_crowd\\Lightweight_Django\\placeholder\\home.html但是错误说:它找不到:C:\\Us......
  • 算法 图论最短路径
    零、写在前面本文讲述Dijkstra、Bellman-Ford、Floyd-Warshall算法一、分类G(graph):图V(vertex):点E(edge):边一个图可以用数学语言描述为。W(weights):权所以一个图也可以用数学语言描述为。二、作图2.1作图网站(推荐) 在线作图网站:图论作图网站GraphEditor用法:Undirected......