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)

4

1 に答える 1

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']
}
于 2012-12-14T07:53:24.753 に答える