题目描述 Description

Farmer John每年有很多栅栏要修理。他总是骑着马穿过每一个栅栏并修复它破损的地方。

John是一个与其他农民一样懒的人。他讨厌骑马,因此从来不两次经过一个栅栏。你必须编一个程序,读入栅栏网络的描述,并计算出一条修栅栏的路径,使每个栅栏都恰好被经过一次。John能从任何一个顶点(即两个栅栏的交点)开始骑马,在任意一个顶点结束。

每一个栅栏连接两个顶点,顶点用1到500标号(虽然有的农场并没有500个顶点)。一个顶点上可连接任意多(>=1)个栅栏。两顶点间可能有多个栅栏。所有栅栏都是连通的(也就是你可以从任意一个栅栏到达另外的所有栅栏)。

你的程序必须输出骑马的路径(用路上依次经过的顶点号码表示)。我们如果把输出的路径看成是一个500进制的数,那么当存在多组解的情况下,输出500进制表示法中最小的一个 (也就是输出第一个数较小的,如果还有多组解,输出第二个数较小的,等等)。

输入数据保证至少有一个解。

输入描述 Input Description

第1行: 一个整数F(1 <= F <= 1024),表示栅栏的数目

第2到F+1行: 每行两个整数i, j(1 <= i,j <= 500)表示这条栅栏连接i与j号顶点。

输出描述 Output Description

输出应当有F+1行,每行一个整数,依次表示路径经过的顶点号。注意数据可能有多组解,但是只有上面题目要求的那一组解是认为正确的。

样例输入 Sample Input
  1. 9
  2. 1 2
  3. 2 3
  4. 3 4
  5. 4 2
  6. 4 5
  7. 2 5
  8. 5 6
  9. 5 7
  10. 4 6
样例输出 Sample Output
  1. 1
  2. 2
  3. 3
  4. 4
  5. 2
  6. 5
  7. 4
  8. 6
  9. 5
  10. 7
数据范围及提示 Data Size & Hint

见描述

思路:

1.一笔画问题的升级版

2.搜索的时候一定要从有边的最小值开始

3.范围一定是到最大的数而不是到n

4.数据有相同的情况,所以不能简单的把map置1

5.输出格式!输出格式!输出格式!输出格式!输出格式!输出格式!输出格式!输出格式!输出格式!输出格式!输出格式!

 坑点:

  在用nows的时候,要先将初始化为1,然后再用然后再++,以此类推.如果不这样,会全WA

  我真不知道为什么...

  Eg:nows=0,用时ans[++nows]=now;会WAWAWAWAWA

  然后如果nows=1,用时ans[nows]=now,nows++;会AC

(以下为6.24记)

  1. 编表的num0开始++,跟从1开始++的区别
  2. 如果从0开始编号,在往上反的过程中会用到0(因为0的编号是0(为假)嘛),所以要将head数组手动设置为-1才能进入0号元素那条边,如果不设置为-,只能用1往后的边
  3. 所以
  4. (Ps:now初始值为0)
  5. void add(int pre,int to)
  6. {
  7. h[now].to=to;
  8. h[now].next=heads[pre];
  9. heads[pre]=now++;
  10. /*
  11. 前提是heads数组已经设置为-1,并且在使用的时候
  12. for(int j=heads[i];j!=-1;j=h[j].next)
  13. 或者
  14. //for(int j=heads[i];~j;j=h[j].next)
  15. ~表示取反.
  16. */
  17. }
  18. 而如果这样的话
  19. void add(int pre,int to)
  20. {
  21. h[++now].to=to;
  22. h[now].next=heads[pre];
  23. heads[pre]=now;
  24. /*
  25. 从一开始编号的话,到0就停止,所以不需要手动设置为-1
  26. */
  27. }
  28. (额...学姐说的%%%)

代码:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cmath>
  4.  
  5. using namespace std;
  6.  
  7. const int M = ;
  8. int f,nows=,Ms;
  9. int map[M][M],cishu[];
  10. int ans[M];
  11.  
  12. void dfs(int now)
  13. {
  14. for(int i=;i<=Ms;i++)
  15. {
  16. if(map[now][i]>)
  17. {
  18. map[now][i]--;
  19. map[i][now]--;
  20. dfs(i);
  21. }
  22. }
  23. ans[nows]=now;
  24. nows++;
  25. }
  26.  
  27. int main()
  28. {
  29. scanf("%d",&f);
  30. int x,y;
  31. for(int i=;i<=f;i++)
  32. {
  33. scanf("%d%d",&x,&y);
  34. map[x][y]++;
  35. map[y][x]++;
  36. cishu[x]++;
  37. cishu[y]++;
  38. Ms=max(Ms,max(x,y));
  39. }
  40. int flag=;
  41. for(int i=;i<=Ms;i++)
  42. {
  43. if(cishu[i]%==)
  44. {
  45. flag=i;
  46. break;
  47. }
  48. }
  49. if(flag==)
  50. {
  51. for(int i=;i<=Ms;i++)
  52. {
  53. if(cishu[i]>)
  54. flag=i;
  55. break;
  56. }
  57. }
  58. dfs(flag);
  59. for(int i=nows-;i>=;i--)
  60. cout<<ans[i]<<endl;
  61. return ;
  62. }

codevs 2039 骑马修栅栏 USACO x的更多相关文章

  1. [USACO 3.3.1]骑马修栅栏t

    [USACO 3.3.1]骑马修栅栏 时间限制: 1 Sec  内存限制: 64 MB提交: 39  解决: 17[提交][状态][讨论版] 题目描述 农民John每年有很多栅栏要修理.他总是骑着马穿 ...

  2. codevs 水过 骑马修栅栏

    [问题描述] 农民John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个一个栅栏.你必须编一个程序,读入栅 ...

  3. 洛谷P2731 骑马修栅栏 Riding the Fences

    P2731 骑马修栅栏 Riding the Fences• o 119通过o 468提交• 题目提供者该用户不存在• 标签USACO• 难度普及+/提高 提交 讨论 题解 最新讨论 • 数据有问题题 ...

  4. 洛谷P2731 骑马修栅栏 [欧拉回路]

    题目传送门 骑马修栅栏 题目背景 Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. 题目描述 John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经 ...

  5. 欧拉路小结 JZYZOJ1210 骑马修栅栏

    现在写到欧拉路,理解起来并不算特别困难...吧... 但是非常恶心的是每次都要调试半天,做不到一遍两遍就能ac 每次写程序都对于程序的整体构架没有清晰的思路,想到哪里写到哪里真的是个非常差的习惯[尽管 ...

  6. 洛谷 P2731 骑马修栅栏 Riding the Fences 解题报告

    P2731 骑马修栅栏 Riding the Fences 题目背景 Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. 题目描述 John是一个与其他农民一样 ...

  7. 洛谷 P2731 骑马修栅栏 Riding the Fences

    P2731 骑马修栅栏 Riding the Fences 题目背景 Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. 题目描述 John是一个与其他农民一样 ...

  8. P2731 骑马修栅栏 Riding the Fences 题解(欧拉回路)

    题目链接 P2731 骑马修栅栏 Riding the Fences 解题思路 存图+简单\(DFS\). 坑点在于两种不同的输出方式. #include<stdio.h> #define ...

  9. 「USACO」「LuoguP2731」 骑马修栅栏 Riding the Fences(欧拉路径

    Description Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个栅栏.你必须编 ...

随机推荐

  1. Lesson 1 A puma at large

    spot (v) 看出,发现 oblige (v) 使...感到必须:obliged (adj)必须的, feel obliged to do sth. 感到不得不做某事 ==have to.eg:E ...

  2. OpenCV在ARM-linux上的移植过程遇到的问题3---共享库中嵌套库居然带路径【未解决】

    [Linux开发]OpenCV在ARM-linux上的移植过程遇到的问题3-共享库中嵌套库居然带路径[未解决] 标签(空格分隔): [Linux开发] 移植opencv到tq2440 一.下载open ...

  3. <<用法

    数据移位运算符,左移几位,如:x=i<<4;就是将i的值左移4位(放大2的4次方)后,赋给x,若i=2,则X=32.

  4. ant buid.xml 模板

    <?xml version="1.0" encoding="UTF-8"?> <project name="ant" de ...

  5. [转帖]又一国产x86处理器可大规模上市:Intel至强核心 安全监测管控

    又一国产x86处理器可大规模上市:Intel至强核心 安全监测管控 https://www.cnbeta.com/articles/tech/850525.htm 不知道是不是有一起汉芯事件 国产CP ...

  6. 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)

    洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...

  7. 最长上升子序列(LIS) Medium1

    某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于 ...

  8. PHP实现支付宝小程序用户授权的工具类

    背景 最近项目需要上线支付宝小程序,同时需要走用户的授权流程完成用户信息的存储,以前做过微信小程序的开发,本以为实现授权的过程是很简单的事情,但是再实现的过程中还是遇到了不少的坑,因此记录一下实现的过 ...

  9. C#多线程下更新UI的几种方法

    1. 使用UI线程的SynchronizationContext的Post/Send方法,这种情况一般在窗体构造函数或者FormLoad中获取同步上下文: 范例: public partial cla ...

  10. 两个 DataTable 读取重复数据,dataTable1与dataTable2不同

    protected void Page_Load(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Columns.Ad ...