興味深い問題なので、楽しみのために小さな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']
}