题目
https://www.luogu.org/problemnew/show/P2731
思路
欧拉路径模板题
求欧拉路径的合兴思路是搜索
一个欧拉路径满足有两个度数为奇数的点背奇数条边连着
一个欧拉回路满足所有点的度数为偶数
怎么求很明显了
我们只要找一个尽量小的点为起点,即可满足题目要求
代码
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=577,inf=0x3f3f3f3f;
int n,ss,s=inf,a[maxn][maxn],d[maxn],ans[maxn];
void find(int x)
{
for(int i=1; i<=500; i++)
{
if(a[x][i])
{
a[x][i]--; a[i][x]--; find(i);
}
}
ans[ss--]=x;
}
int main()
{
scanf("%d",&n);
ss=n+1;
for(int i=1; i<=n; i++)
{
int x,y;
scanf("%d%d",&x,&y);
a[x][y]++; a[y][x]++; d[x]++; d[y]++;
s=min(s,min(x,y));
}
int t=inf;
for(int i=1; i<=500; i++) if(d[i]&1)
{
t=i; break;
}
if(t<inf) find(t);else find(s);
for(int i=1; i<=n+1; i++) printf("%d\n",ans[i]);
}
本文介绍了解决洛谷P2731问题的欧拉路径算法,通过搜索策略找到满足两个点度数为奇数或所有点度数为偶数的欧拉路径或回路。代码实现采用C++,从最小点开始搜索,确保满足题目要求。
462

被折叠的 条评论
为什么被折叠?



