#P1594. Message Routing
Message Routing
本题没有可用的提交语言。
描述
国际标准化组织定义了一个名为X.400的消息处理系统(MHS)。MHS的一个功能单元——消息传输代理(MTA),负责处理消息的路由。路由是根据消息的发起者/接收者名称的组成部分来执行的。就本题而言,发起者/接收者(O/R)名称的有效组成部分(按范围从大到小排列)包括国家(C)、行政管理域(ADMD)、私有管理域(PRMD)和组织名称(O)。每个MTA都使用自己的路由表将消息转发到下一个MTA,或者在本地交付消息。
你的程序需要模拟一组MTA处理消息的过程。每次有消息到达(或提交)到一个MTA时,该MTA会使用消息的O/R名称和自身的路由表,将消息转发到合适的MTA。如果MTA发现消息的最终目的地是它自己,就会在本地交付该消息。你的程序要模拟这种消息转发活动,以追踪邮件在这组MTA中的传递路径。
路由功能是通过将路由表中条目的相关字段与消息的O/R名称组成部分进行比较来实现的。每个路由表条目恰好指向一个MTA,不过一个MTA在路由表中可能有多个条目。从顶部开始,第一个其字段与消息中相应O/R名称组成部分匹配的路由表条目将被选中,消息会被转发到该条目标识的MTA。路由表条目中可能包含通配符(用星号*
表示),通配符组成部分总是与消息中相应的O/R名称组成部分匹配。
MTA还负责路由错误的检测和恢复。如果一个MTA检测到它收到了一条之前已经处理过的消息(即检测到了循环路由路径),它会将该消息放入无法投递队列,并生成一个未投递报告。此外,如果一个MTA无法对消息进行路由(即没有路由表条目与消息的O/R名称匹配),它会将该消息放入无法投递队列,并生成一个路由错误报告。
输入
你的程序的输入将由一系列消息路由场景组成。每个场景的输入从一行开始,该行包含一个整数(),表示该场景中MTA的数量。接下来的若干行将包含对这个MTA中每个MTA的描述。
每个MTA的描述从一行开始,该行在第1到10列包含MTA的名称(一个1到10个字符的左对齐字母字符串,不包含嵌入空格),在第12列包含一个整数(),表示该MTA的路由表中的条目数量。接下来的行中,每行在第1到10列包含一个相邻MTA的有效名称,在第15到24列、第30到39列、第45到54列和第60到69列分别包含国家、ADMD、PRMD和组织名称。每个O/R名称组成部分将由1到10个左对齐的字母字符组成,字段内不包含嵌入空格。或者,一个O/R名称组成部分可能在字段的第一列包含一个星号*
,表示该字段为通配符匹配。
在MTA的描述之后,会有一行包含一个整数(),表示在模拟中要发送的消息数量。接下来的行中,每行将包含一条消息的描述。每条消息的描述在第1到10列包含上述描述的MTA中的一个有效名称(左对齐),在第15到24列、第30到39列、第45到54列和第60到69列分别包含国家、ADMD、PRMD和组织名称。每个O/R名称组成部分将由1到10个左对齐的字母字符组成,字段内不包含嵌入空格,MTA名称是消息提交的位置,也是模拟开始的地方。
输出
对于每个场景,你需要打印“Scenario # X”,其中是场景编号,从1开始,后续场景编号依次递增。接下来的行中,每行将在第1列左对齐包含消息的编号,紧接着是以下消息之一:
- “ -- delivered to MTA_NAME”,
- “ -- circular routing detected by MTA_NAME”,或者
- “ -- unable to route at MTA_NAME”。
在以上三种消息中,MTA_NAME
将被生成报告的MTA的名称所取代。除了MTA_NAME
之外,你要严格按照上述格式打印字符串,包括空格和连字符。在消息报告列表之后,你需要打印一个空行,然后继续处理下一个场景。
输入数据1
5
NAULINS 3
HOUSTON US SHIP * UHDOWNTOWN
NAULINS US SHIP * UNO
DALLAS US AIR UT *
HOUSTON 4
HOUSTON US * UH UHDT
SANANTONIO US BUS UT UTSA
DALLAS US AIR UT *
NAULINS US SHIP * UNO
DALLAS 7
DALLAS US * UT UTD
DALLAS US * UT UTA
HOUSTON US * UH *
SANANTONIO US AIR UT UTSA
OKLAHOMA US BUS * OU
NAULINS US AIR * UNO
HOUSTON US SHIP * *
OKLAHOMA 3
OKLAHOMA US * * OU
DALLAS US AIR * *
SANANTONIO US BUS * *
SANANTONIO 5
HOUSTON * * * UNO
HOUSTON US BUS UH *
DALLAS US AIR * *
SANANTONIO US * UT UTSA
OKLAHOMA US BUS * *
5
SANANTONIO US AIR COLLEGE UNO
OKLAHOMA US BUS UH UHDT
DALLAS US SHIP COLLEGE UNO
NAULINS US AIR COLLEGE OU
HOUSTON US AIR UT UTSA
输出数据1
Scenario # 1
1 -- unable to route at HOUSTON
2 -- delivered to HOUSTON
3 -- delivered to NAULINS
4 -- unable to route at NAULINS
5 -- circular routing detected by DALLAS
来源
美国中南部1995年