AcWing 1124. 骑马修栅栏
原题链接
考察:欧拉路径
思路:
根本不难,注意\(ans\)数组不要开小了.....
Code
#include <iostream>
#include <cstring>
using namespace std;
const int N = 510;
int m,g[N][N],d[N],maxn,ans[N<<2],cnt,minv = N;
void dfs(int u)
{
for(int i=minv;i<=maxn;i++)
{
if(g[u][i])
{
g[u][i]--,g[i][u]--;
dfs(i);
}
}
ans[++cnt] = u;
}
int main()
{
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
int a,b; scanf("%d%d",&a,&b);
g[a][b]++,g[b][a]++;
d[a]++,d[b]++;
maxn = max(a,maxn),minv = min(a,minv);
maxn = max(b,maxn),minv = min(b,minv);
}
int sta = minv;
for(int i=minv;i<=maxn;i++)
if(d[i]&1)
{
sta = i;
break;
}
dfs(sta);
for(int i=cnt;i>=1;i--) printf("%d\n",ans[i]);
return 0;
}