当前位置:   article > 正文

C++合并数字_c++数字的合并

c++数字的合并
题目描述

1-n,共n个数字,初始时每个数都是独立的算作1个串,之后会进行n-1次合并,每次合并操作,会把一个串放到另一个串的后面。

合并时会给出2个数字,x y,表示将以y为开头的串放到x为开头的串的后面。例如:

1 3 (3放到1后面,=> (1 3), 2, 4 )

2 4 (4放到2后面,=> (1 3), (2 4))

1 2 (2放到1后面,=> (1 3 2 4))

在n - 1次合并后,按顺序输出最终剩下的这个串的全部数字。

输入格式

第1行:1个数n(2 <= n <= 10000) 后面n - 1行,每行2个数x y,对应n - 1次合并操作,把以y为开头的串放到以x为开头的串的末尾。

输出格式

输出共n行,每行1个数,对应最终串包含的n个数字。

样例
输入样例
  1. 4
  2. 1 3
  3. 2 4
  4. 1 2
输出样例
  1. 1
  2. 3
  3. 2
  4. 4

题解:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. struct node {
  4. int next, tail;
  5. } nodes[10010];
  6. bool isnext[10010];
  7. int n;
  8. int main() {
  9. cin >> n;
  10. for (int i = 1; i <= n; i++) {
  11. nodes[i].tail = i;
  12. }
  13. for (int i = 1; i < n; i++) {
  14. int a, b;
  15. cin >> a >> b;
  16. nodes[nodes[a].tail].next = b;
  17. nodes[a].tail = nodes[b].tail;
  18. isnext[b] = true;
  19. }
  20. int head = 0;
  21. for (int i = 1; i <= n; i++) {
  22. if (!isnext[i]) {
  23. head = i;
  24. }
  25. }
  26. for (int p = head; p != 0; p = nodes[p].next) {
  27. cout << p << endl;
  28. }
  29. return 0;
  30. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/252574
推荐阅读
相关标签
  

闽ICP备14008679号