卧薪尝胆,厚积薄发。
骑马修栅栏
Date: Mon Sep 10 22:05:41 CST 2018 In Category: NoCategory

Description:

求一条字典序最小欧拉路。
$1\le n \le 500$

Solution:

$Hierholzers$ 算法模板。

Code:


#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<stack>
#include<cstring>
using namespace std;
int n;
#define MAXN 510
int g[MAXN][MAXN];
int ind[MAXN];
stack<int> s;
void dfs(int k)
{
for(int i = 1;i <= 500;++i)
{
if(g[k][i] != 0)
{
--g[k][i];--g[i][k];
dfs(i);
}
}
s.push(k);
return;
}
int main()
{
scanf("%d",&n);
int st = 0x3f3f3f3f;
int a,b;
for(int i = 1;i <= n;++i)
{
scanf("%d%d",&a,&b);
++g[a][b];++g[b][a];
++ind[a];++ind[b];
st = min(st,min(a,b));
}
for(int i = 1;i <= 500;++i)
{
if(ind[i] % 2 == 1)
{
st = i;
break;
}
}
dfs(st);
while(!s.empty())
{
cout << s.top() << endl;
s.pop();
}
return 0;
}
Copyright © 2020 wjh15101051
ღゝ◡╹)ノ♡