试题 算法训练 旅行家日记

资源限制

内存限制:256.0MB   C/C++时间限制:2.0s   Java时间限制:6.0s   Python时间限制:10.0s

问题描述

  旅行家的日记是若干条形如“A B”的语句(其中A,B都为字符串,且长度均不超过50),举例来说,日记“bigtree river”就表示旅行家从bigtree到了river。为了保持新鲜感,每个地点旅行家只会去一次。所以旅行家的旅行路线是从某个地点出发,经过若干中间地点后在某个地点结束。但由于意外,旅行家把他的日记打乱了,现在需要你来帮他复原他的日记,找到他旅行的路线。

输入格式

  输入文件第一行,一个整数N,表示旅行家的日记条数。
  接下来N行,每行一条日记。

输出格式

  输出旅行家旅行的路线,即输出N+1行,每行一个地名。

样例输入

4
106B 104A
105B 105A
104A 104B
105A 106B

样例输出

105B
105A
106B
104A
104B

数据规模和约定

  对于30%的数据 N<=1000
  对于70%的数据 N<=10000
  对于100%的数据 N<=50000
  地名有小写字母,大写字母和数字组成,且长度不超过20。

import java.util.Scanner;
import java.util.TreeMap;

public class Main {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner=new Scanner(System.in);
        int n=scanner.nextInt();
        TreeMap treeMap=new TreeMap<>();
        TreeMap treeMap1=new TreeMap<>();//用于寻找开头。
        String key=scanner.next();
        String value=scanner.next();
        for(int i=0;i<n;i++) {
            //System.out.println(key+" "+value);
            treeMap1.put(value, key);
            treeMap.put(key, value);
            if(i==n-1)
                break;
            key=scanner.next();
            value=scanner.next();
        }
        //System.out.println(treeMap.size());
        /**
         * 向前查询查到第一个地方
         */
        while(treeMap1.containsKey(key)) {
            key=(String)treeMap1.get(key);
        }
        System.out.println(key);
        /**
         * 向后查询:以第一个地方为头向后依次查询
         */
        while(treeMap.containsKey(key)) {
            System.out.println(treeMap.get(key));
            key=(String) treeMap.get(key);
        }

    }
}

  • 16
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值