这似乎需要使用递归来解决(虽然不是最高效的解决方案,但肯定是最简单的解决方案,如果您的数据很小,这应该没有关系):
var check = function(input, colors) {
if (!input.length) {
return true;
}
var input_color = input.pop();
var ok = false;
for (var i = 0; i < colors.length; i++) {
var color = colors[i];
if (!color) {
break;
}
if (color.indexOf(input_color) !== -1) {
colors.splice(i, 1);
ok = check(input, colors);
if (!ok) {
colors.splice(i, 0, color);
} else {
break;
}
}
}
if (!ok) {
input.push(input_color);
}
return ok;
};
并且使用方法:
var colors = [
['white', 'blue'],
['green', 'yellow'],
['black'],
['yellow', 'blue', 'pink'],
['orange', 'red'],
['brown', 'white']
];
check(['white', 'blue', 'pink', 'black', 'orange', 'yellow'], colors);
请注意,它会改变
colors
和
inputs
数组(每次调用
check
时都必须复制它们)。
实际上,这个问题与路径查找问题非常相似。这是一种暴力解决方案。
if
语句吗? - zerkms