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个数字。

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

题解:

#include <bits/stdc++.h>
using namespace std;
struct node {
    int next, tail;
} nodes[10010];
bool isnext[10010];
int n;
int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) {
        nodes[i].tail = i;
    }
    for (int i = 1; i < n; i++) {
        int a, b;
        cin >> a >> b;
        nodes[nodes[a].tail].next = b;
        nodes[a].tail = nodes[b].tail;
        isnext[b] = true;
    }
    int head = 0;
    for (int i = 1; i <= n; i++) {
        if (!isnext[i]) {
            head = i;
        }
    }
    for (int p = head; p != 0; p = nodes[p].next) {
        cout << p << endl;
    }
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
合并排序和快速排序都是使用分治思想实现的排序算法,并且都可以使用递归来完成。 它们的区别主要体现在以下几个方面: 1. 时间复杂度: 快速排序的时间复杂度是O(nlog2n),而合并排序的时间复杂度也是O(nlog2n)。不过,平均来说,快速排序是最好的一种内部排序方法。 2. 空间使用: 快速排序是原地排序,而合并排序不是原地排序。合并排序需要额外的空间来协助合并两个有序数组。 3. 分治思路: 快速排序每次将数组一分为三(将排好序的那个数字摘出来),而合并排序每次将数组一分为二。 4. 排序方向: 合并排序是自上而下的分解,接着再自下而上的合并排序。而快速排序是边分解边排序,是自上而下的排序。 关于合并排序和快速排序的具体实现,我发现了一个C++的代码示例,其中使用了快速排序的思想,但是在快排中采用了二分地只排前n个的方法,以在n的复杂度内搞定排序。你可以参考这个示例来理解具体的实现过程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [算法C++ 实现 快速排序、归并排序](https://blog.csdn.net/weixin_44775255/article/details/124063700)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【C++】快速排序以及归并排序的算法总结及思想应用分析](https://blog.csdn.net/m0_57298796/article/details/127426894)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值