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;
}
上一篇:pat-1124


下一篇:1124:矩阵加法