B3630 排队顺序 題解

· · 题解

B3630 排队顺序 題解

管理员注:

阅读本文章前,请先阅读 \ \texttt{ShanCreeper} B 题库题解的声明,并了解由于课程需要不展示代码。

如需系统学习相关知识点请报名【洛谷-基础算法计划】

点赞上文章即代表您已阅读并熟知其内容。

n 个人,每个人只知道自己的身后是谁,已知第一位人的编号,输出整个排列顺序。

我们可以使用链表完成:

比如数据:4 6 0 2 3 5。

我们可以先列一个表格。

i 1 2 3 4 5 6
\texttt{nxt}_i 4 6 0 2 3 5

假设队首为 1 号,则 i 次循环 \texttt{now}\texttt{nxt}_\texttt{now} 的值如下:

i \texttt{now} \texttt{nxt}_\texttt{now}
1 1 \texttt{nxt}_1 = 4
2 4 \texttt{nxt}_4 = 2
3 2 \texttt{nxt}_2 = 6
4 6 \texttt{nxt}_6 = 5
5 5 \texttt{nxt}_5 = 3
6 3 \texttt{nxt}_3 = 0

所以输出为:1 \ 4 \ 2 \ 6 \ 5 \ 3

但是,如果不知道 \texttt{head} 怎么办呢?

很简单,如果一个编号如果没有出现在任何一个人的后面,那么他就是第一个人。