2012-12-11 33 views
0

我试图列出当前按字母顺序排列的状态,并按路线顺序对其进行排序。如何订购路线状态列表

作为实例:路线开始在科罗拉多州和华盛顿结束,我知道它通过俄勒冈州,爱达荷州,犹他州和怀俄明(例如http://goo.gl/maps/j6tyu

按字母顺序的路由将是(CO,ID, OR,UT,WA,WY),路线顺序将是(CO,WY,UT,ID,OR,WA)

是否有可能通过只知道哪些状态触及哪些其他状态来计算路线顺序,我需要哪些其他信息?有没有建议阅读链接,可以帮助我

我也实际上有每英里旅行的英里,如果有帮助。 ( CO = 90 ,ID = 275 ,OR = 372 ,UT = 149 ,WA = 8 ,WY = 368 )

+0

a)你打算使用什么平台 - GIS软件,数据库查询,编程语言? b)你知道吗,路线中的第一个状态是什么? – user1702401

+0

这似乎是相当棘手的任务,在某些情况下,你不能得到单一的结果。例如,路线可以是:阿拉巴马州田纳西州密西西比州阿肯色州或阿拉巴马州密西西比州田纳西州阿肯色州。另一个例子:当你有阿拉巴马州,田纳西州,密西西比州时,你不能说出哪个州的路线开始,哪里结束。 – 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

不是我正在寻找的东西,但我认为这仍然是一个有用的回应。 –