在图表上实现传输

时间:2017-11-23 08:28:09

标签: java algorithm graph linked-list

我手头有一个任务,我必须铺设铁路时间表,现在铁路轨道是直的,我已经实施了一个双重链表,用于表示火车终点站,后面的终端和终端前面这个由列表中的链接表示。

现在我想在到目前为止铺设的轨道上实施一列火车,我对实施数据库并不感兴趣,所有原始数据都是JSON形式。 JSON中一个终端的示例如下:

{
    "stations_array": [{
            "vertexId": 0,
            "name": "Terminal0",
            "lat": "84.2207",
            "lng": "74.3884",
            "isEndTerminal": true,
            "isFunctional": true,
            "vertNext": 1,
            "vertPrev": null
        },
        {
            "vertexId": 1,
            "name": "Terminal1",
            "lat": "104.2580",
            "lng": "94.4512",
            "isEndTerminal": false,
            "isFunctional": true,
            "vertNext": 2,
            "vertPrev": 1
        },
        {
            "vertexId": 2,
            "name": "Terminal2",
            "lat": "14.1659",
            "lng": "04.5632",
            "isEndTerminal": false,
            "isFunctional": true,
            "vertNext": 3,
            "vertPrev": 1
        }
    ]
}

我也用JSON代表一列火车,如下:

{
    "trains_array": [{
        "id": 16,
        "source": "Terminal0",
        "destination": "Terminal2",
        "start_time": "06:00",
        "days": "daily",
        "terminals": [{
                "id": 0,
                "name": "Terminal0",
                "time": "06:00"
            },
            {
                "id": 1,
                "name": "terminal1",
                "time": "06:12"
            },
            {
                "id": 2,
                "name": "Terminal2",
                "time": "06:25"
            }
        ]
    }]
}

现在上面JSON中的终端数组告诉我列车停在哪里(id是终端数组中每个对象的外键表示),我通过代码计算知道哪个列车到达哪个站的哪个时间,哪个站停止或省略。然而,整个方法似乎有点硬编码。我想知道是否有更好的方式可以代表这里的事情。

1 个答案:

答案 0 :(得分:2)

如标题所示在图表上实施传输,您应该使用图表来表示铁路网络。由于所有的轨道都是双向的,我想,使用双向链表并没有多大意义。

具有相邻工作站的列表应该足够,更简单,更具可扩展性,然后您可以使用分叉。

{
    "stations_array": [{
            "vertexId": 0,
            "name": "Terminal0",
            "lat": "84.2207",
            "lng": "74.3884",
            "isEndTerminal": true,
            "isFunctional": true,
            "adj": [{1}]
        },
        {
            "vertexId": 1,
            "name": "Terminal1",
            "lat": "104.2580",
            "lng": "94.4512",
            "isEndTerminal": false,
            "isFunctional": true,
             "adj": [{0,2}]
        },
        {
            "vertexId": 2,
            "name": "Terminal2",
            "lat": "14.1659",
            "lng": "04.5632",
            "isEndTerminal": false,
            "isFunctional": true,
            "adj": [{1,3}]
        }
    ]
}