F题:求最佳旅行路线 (Input File:travel.in/Output File:travel.out) (Submit:travel.exe)
你在加拿大航空公司组织的一次竞赛中获奖,奖品是一张免费机票,可在加拿大旅行。从最西的一个城市出发,单方向从西向东经若干城市到达最东一个城市(必须到达最东的城市);然后再单方向从东向西飞回起点(可途经若干城市)。除起点城市外,任何城市只能访问1次。起点城市被访问2次:出发1次,返回1次。除指定的航线外,不允许乘其它航线,也不允许使用其它交通工具。求解的问题是: 给定城市表列及两城市之间的直通航线表列,请找出一条旅行路线,在满足上述限制条件下,使访问的城市数尽可能多。 多个不同的输入数据组写在一个名为C:\ION\ITIN.DAT的ASCII文件中,文件中每一数据组的格式说明如下: ·数据组的第1行是N和V N 恰巧有可以被访问的城市数,N是正整数,N<100 V 代表下面要列出的直飞航线数,V是正整数 ·以下N行中每一行是一个城市名,可乘飞机访问这些城市。城市名出现的顺序是:从西向东。也就是说,设i,j代表城市表列中城市出现的顺序,当i>j时,表示城i在城j的东边(这里保证不会有两个城市在同一条经线上)。 城市名是一个长度不超过15个字符串,串中的字符可以是字母或阿拉伯数字。 例如:AGR34或BEL4 ·接下来的V行中,每行有两个城市名,中间用空格隔开,如下所示:city1 city2 表示city1到city2有一条直通航线,从city2到city1也有一条直通航线。 ·不同的输入数据组之间被空行隔开(参看例子),最后一个数据组之后没有空行。 下面的例子放在文件C:\IOI\ITIN.DAT中:
8 9 Vancouver Yellowknife Edmonton Calgary Winnipeg Toronto Montreal Halifax Vancouver Edmonton Vancouver Calgary Calgary Winnipeg Winnipeg Toronto Toronto Halifax Montreal Halifax Edmonton Montreal Edmonton Yellowknife Edmonton Calgray
5 5 c1 c2 c3 c4 c5 c5 c4 c2 c3 c3 c1 c4 c1 c5 c2
假定输入数据完全正确,不必对输入数据进行检查。对于每一组输入数据 ·第1行是输入数据中给出的城市数 ·第2行是你所建立的旅行路线中所访问的城市总数M ·接下来的(M+1)行是你的旅行路线的城市名,每行写1个城市名。首先是出发城市名,然后按访问顺序列出其它城市名。注意,最后一行(终点城市)的城市名必然是出发城市名。 如题目无解,则输出数据格式为: ·第1行是输入数据中给出的城市数 ·第2行写:“NO SOLUTION” 上述例子的解如下所示:
ITIN.SOL
8 7 Vancouver Edmonton Montreal Halifax Toronto Winnipeg Calgary Vancouver
5 NO SOLUTION
[此贴子已经被作者于2004-11-28 02:26:00编辑过]