2012-12-11 4 views
0

나는 현재 알파벳순으로 얻은 상태 목록을 가져 와서 경로 순서에 따라 정렬하려고합니다. 예를 들어 경로의 상태 목록을 주문하는 방법

: 라우트는 콜로라도에서 시작 워싱턴에서 끝나고 나는 그것이 오리건, 아이다 호, 유타, 와이오밍 통과 것을 알고있다 (예를 들어 http://goo.gl/maps/j6tyu)

순 경로가 될 것이다 (CO, ID, (CO, WY, UT, ID, OR, WA)

어떤 상태가 다른 주를 터치하는지 알면 경로 순서를 계산할 수 있습니까? 어떤 다른 정보가 있어야합니까? 도움이 될 수있는 추천 도서 링크가 있습니까

실제로 도움이된다면 각 주마다 여행 한 마일도 있습니다. 이 흥미로운 문제이기 때문에 ( CO = 90 , ID = 275 , OR = 372 , UT = 149 , WA = 8 , 와이오밍 = 368 )

+0

a) GIS 소프트웨어, 데이터베이스 쿼리, 프로그래밍 언어는 어떤 플랫폼을 사용합니까? b) 경로의 첫 번째 주 란 무엇입니까? – user1702401

+0

아주 까다로운 작업 인 것 같고 어떤 경우에는 단 하나의 결과를 얻을 수 없습니다. 예를 들어 경로는 Alabama-Tennesse-Mississippi-Arkansas 또는 Alabama-Mississippi-Tennesse-Arkansas 일 수 있습니다. 또 다른 예 : 알라바마, 테네시, 미시시피가있는 경우, 어떤 주 경로가 시작되고 어디에서 끝나는 지 알 수 없습니다. – user1702401

+0

@ user1702401, 나는 PHP로 개발하고 있는데, 포스트에서 언급했듯이 시작과 끝 지점은 모두 알려져있다. 나는 이것이 단지 인접을 고려할 때 불가능하다고 생각하기 시작했다. –

답변

1

, 나는 그냥 재미 작은 JS 스크립트를 작성 : http://jsfiddle.net/Ufbbt/

var from = 'CO'; 
var to = 'WY'; 
var thru = ['ID', 'OR', 'UT', 'WA']; 

var globalCount = 0; 

var doStuff = function(currState, states, str) { 

    if (states.length == 0) { 
     if (inArray(to, statesDesc[currState])) { 
      console.log(str + '->' + to); 
      globalCount++; 
     } 
     return; 
    } 

    for (var i = 0, len = states.length; i < len; i++) { 
     if (inArray(states[i], statesDesc[currState])) { 
      var newStates = states.slice(0); // clone original array 
      var newCurrState = newStates.splice(i, 1)[0]; 
      doStuff(newCurrState, newStates, str + '->' + newCurrState); 
     } 
    } 
} 

var inArray = function(what, where) { 
    for (var i = 0, len = where.length; i < len; i++) { 
     if (what == where[i]) 
      return true; 
    } 
    return false; 
} 

// Now, initial execute 
doStuff(from, thru, from); 
console.log(globalCount + ' route(s) found'); 

var statesDesc = { 
    AK: ['WA'], 
    AL: ['TN','GA','FL','MS'], 
    AR: ['MO','TN','MS','LA','TX','OK'], 
    AZ: ['UT','CO','NM','CA','NV'], 
    CA: ['OR','NV','AZ','HI'], 
    CO: ['WY','NE','KS','OK','NM','AZ','UT'], 
    CT: ['MA','RI','NY'], 
    DC: ['MD','VA'], 
    DE: ['PA','NJ','MD'], 
    FL: ['GA','AL'], 
    GA: ['NC','SC','FL','AL','TN'], 
    HI: ['CA'], 
    IA: ['MN','WI','IL','MO','NE','SD'], 
    ID: ['MT','WY','UT','NV','OR','WA'], 
    IL: ['WI','IN','KY','MO','IA'], 
    IN: ['MI','OH','KY','IL'], 
    KS: ['NE','MO','OK','CO'], 
    KY: ['OH','WV','VA','TN','MO','IL','IN'], 
    LA: ['AR','MS','TX'], 
    MA: ['NH','RI','CT','NY','VT'], 
    MD: ['PA','DE','DC','VA','WV'], 
    ME: ['NH'], 
    MI: ['OH','IN','WI'], 
    MN: ['WI','IA','SD','ND'], 
    MO: ['IA','IL','KY','TN','AR','OK','KS','NE'], 
    MS: ['TN','AL','LA','AR'], 
    MT: ['ND','SD','WY','ID'], 
    NC: ['VA','SC','GA','TN'], 
    ND: ['MN','SD','MT'], 
    NE: ['SD','IA','MO','KS','CO','WY'], 
    NH: ['ME','MA','VT'], 
    NJ: ['NY','DE','PA'], 
    NM: ['CO','OK','TX','AZ','UT'], 
    NV: ['ID','UT','AZ','CA','OR'], 
    NY: ['VT','MA','CT','NJ','PA'], 
    OH: ['PA','WV','KY','IN','MI'], 
    OK: ['KS','MO','AR','TX','NM','CO'], 
    OR: ['WA','ID','NV','CA'], 
    PA: ['NY','NJ','DE','MD','WV','OH'], 
    RI: ['MA','CT'], 
    SC: ['NC','GA'], 
    SD: ['ND','MN','IA','NE','WY','MT'], 
    TN: ['KY','VA','NC','GA','AL','MS','AR','MO'], 
    TX: ['OK','AR','LA','NM'], 
    UT: ['ID','WY','CO','NM','AZ','NV'], 
    VA: ['MD','DC','NC','TN','KY','WV'], 
    VT: ['NH','MA','NY'], 
    WA: ['AK','ID','OR'], 
    WI: ['MI','IL','IA','MN'], 
    WV: ['PA','MD','VA','KY','OH'], 
    WY: ['MT','SD','NE','CO','UT','ID'] 
} 
+0

정확히 내가 찾던 것이 아니었지만, 여전히 유용한 응답이라고 생각합니다. –

관련 문제