CodeVS2019 骑马修栅栏

来源:互联网 发布:产品外壳设计知乎 编辑:程序博客网 时间:2024/04/24 16:18

link:http://codevs.cn/problem/2039/

题解:
很多人混淆概念,说这道题是欧拉回路

欧拉回路是欧拉路径的一种特殊情形,这道题其实是让你求欧拉路径

算法就不多说了

其中栈的作用可以理解为,如果提早进入了通向结尾的那条路,就用栈先把它存下来,最后再接起来

代码:

#include <cstdio>#include <algorithm>#define maxn 510using namespace std;int map[maxn][maxn], F, S=10000, du[maxn], stack[maxn], top;void input(){int i, a, b;scanf("%d",&F);for(i=1;i<=F;i++)scanf("%d%d",&a,&b),map[a][b]++,map[b][a]++,du[a]++,du[b]++;}void dfs(const int pos){int i;for(i=1;i<=500;i++)if(map[pos][i])map[pos][i]--,map[i][pos]--,dfs(i);stack[++top]=pos;}int main(){int i;input();for(i=1,S=10000;i<=500;i++)if(du[i]&1)S=min(S,i);for(i=1;S>500;i++)if(du[i])S=min(S,i);dfs(S);for(;top;printf("%d\n",stack[top--]));return 0;}


0 0
原创粉丝点击