这道题的正解是 Hierholzer 算法求字典序最小的欧拉路径,但是我们用朴素解法 回溯枚举未用跳转 也能在考试时拿到一定的分数。
每条 hops[p]=[u,v] 是一条有向边。从 Core-SW-01 出发,每次在当前点的未用出边里按终点名字从小到大尝试;用完全部 m 条就得到一条合法走法。因为出边是按名字排过的,第一条搜到的完整走法就是字典序最小的。
样例和小数据能算对。m 到 300 且分支很多时,回溯是阶乘级,会超时,所以后面再给出正解。
排查骨干网上的报文时,运维手里会有一张跳转表。表中第 p 项写作 hops[p]=[u,v],表示报文从设备 u 发到设备 v。
需要把表里的跳转排成一条走法。这些跳转同属从 Core-SW-01 出发的一条流,因此走法的第一个点必须是 Core-SW-01。若有若干条都合法的走法,按设备名的字典序取出最小的那一条。
比如 ["Core-SW-01","N-A"] 会排在 ["Core-SW-01","N-B"] 前面。
保证至少能排出一种合法走法。每条跳转都要恰好用一次,既不能漏也不能重复。
机房里的设备会连成有向图。追异常报文或改拓扑时,要把报文经过各台机器的先后顺序写清楚。本题就是对照事先配好的跳转表,把真实走过的设备序列还原出来。
若干行,每行两个字符串 u、v,表示一条从 u 指向 v 的跳转;行数就是跳转条数。
示例如下:
N-A N-B
Core-SW-01 N-A
Dev-P Dev-Q
N-B Dev-P
上面这份表示例对应的走法是:
Core-SW-01 N-A N-B Dev-P Dev-Q
把走法中的设备名用空格隔开,输出成一行。
输入
Core-SW-01 R-B
Core-SW-01 R-A
R-A R-C
R-C Core-SW-01
R-B R-A
输出
Core-SW-01 R-A R-C Core-SW-01 R-B R-A
说明
从 Core-SW-01 出发,先走到 R-A,再经 R-C 回到起点,最后走 R-B 再到 R-A,每条跳转恰好一次。
另一条合法走法是 Core-SW-01 R-B R-A R-C Core-SW-01 R-A,但第二个点 R-B 比 R-A 大,字典序更靠后。
提示:同一点若还剩若干条未用跳转,应优先走终点名字更小的那条。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册