2017-11-23 19 views
3

나는 레일 시간표를 내려야 만하는 작업을하고 있습니다. 이제 레일 트랙이 직선이고 열차 터미널, 터미널의 표현을 위해 이중 링크 목록을 구현했습니다. 이것과 터미널 앞에서 이것은 목록의 링크로 표시됩니다.그래프를 통한 전송 구현

지금까지 설명한 트랙을 통해 기차를 구현하고 싶습니다. 데이터베이스 구현에 지장이 없으며 모든 원시 데이터가 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 
     } 
    ] 
} 

그리고 아래 인 :

{ 
    "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의 단자 배열은 저 곳을 알려줍니다처럼 JSON에서 하나 개의 터미널의 예 보인다 열차는 멈 춥니 다. (id는 각 객체에 대한 터미널 배열 내부의 외래 키 표현입니다.) 코드를 통해 어떤 열차가 어떤 역에 도착했는지, 어떤 역이 멈추거나 빠져 있는지를 계산합니다. 그러나이 전체 접근법은 약간 하드 코딩 된 것 같습니다. 나는 여기서 물건을 표현할 수있는 더 좋은 방법이 있는지 알고 싶다.

+0

그래서 방송국에는 포크가 없습니까? 역에는 언제나 단 하나의 이전 및 다음 정거장이있을 것입니까? – ajc

+0

현재 설정에서 두 개의 가장자리가있는 거의 직선 레일 링크를 매핑 중입니다. 나는 포크를 포함하는 더 넓은 해결책에 반대하지는 않지만 !! – User3

+1

이것은 좋지만 매우 광범위한 질문 일 수 있습니다. 많은 해석을 위해 열립니다. 동시에 많은 기존 솔루션이 있습니다. > https://developer.wmata.com/docs/services/ '여기에 표현할 수있는 더 나은 방법이 있습니까?'에 대한 간단한 대답은 '예'입니다. 도움이 되길 바랍니다. – ajc

답변

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}] 
     } 
    ] 
} 
+0

LinkedList는 그래프의 향미입니다. 감사하지만 LinkedList의 가장자리로 변환되는 Adjacent에 대한 아이디어를 얻습니다. 또한 인접한 두 스테이션이있는 스테이션이 종료 터미널이 될 필요가 없습니다. – User3

+0

스테이션 A에서 E까지 존재하는 경우에도 열차가 B에서 D로만 이동합니다. – User3

+1

당신은 말단 단말기에 대해 옳았으며 xD 속성을 잘 유지하십시오. 그러나 연결된 목록이 그래프의 하위 집합이라하더라도 꼭지점 수는 2로 제한됩니다. –